数组的特性和方法

数组空位

数组可以使用一串逗号来创建空位,逗号前面为一项,值为undefined

const arr = [, , 2]
console.log(arr[1])	// undefined
console.log(arr[2])	// 2
复制代码

———-

arr.length

改变length会直接作用于原数组:

  • 减小length会从数组尾部 删除元素
  • 增大length会向数组尾部添加值为undefined的元素
const arr = [0, 1, 2]
console.log(arr.length)	// 3
arr.length=2
console.log(arr)	// [0,1]
arr.length = 5
console.log(arr)	// [0,1,undefined,undefined,undefined]
复制代码

———-

Array.isArray(arr)

是否为数组

返回布尔值

console.log(1)
const arr = [0, 1, 2]
const x = 1
console.log(Array.isArray(arr))	// true
console.log(Array.isArray(x))	// false
复制代码

———-

Array.from(伪数组,mapFn)

将伪数组转换成真数组,返回转好的真数组

const str = 'JT'
const arr = Array.from(str, v => v + 's')
console.log(arr)	// [ 'Js', 'Ts' ]
复制代码

arr.toString()

将数组连同逗号转换为一个字符串

const arr = ['a', 'b', 'c']
arr.toString()
console.log(arr.toString())	// a,b,c
console.log(arr)	// [ 'a', 'b', 'c' ]
复制代码

arr.join(拼接符)

将数组中用指定的拼接符拼接成一个字符串

拼接符不指定默认使用逗号

const arr = ['a', 'b', 'c']
console.log(arr.join())	// a,b,c
console.log(arr.join('-'))	// a-b-c
console.log(arr)	// [ 'a', 'b', 'c' ]
复制代码

———-

arr.concat(arr2,arr3…)

合并两个或多个数组,返回一个新数组

const arr = [0, 1, 2]
const arr2 = [4, 5, 6]
const arr3 = [8, 9]
console.log(arr.concat(arr2, arr3))
// [0,1,2,4,5,6,8,9]
console.log(arr)	// [0, 1, 2]
复制代码

arr.slice(star,end)

从star下标到end下标(不包括end)浅拷贝原数组,返回一个新数组

star和end为可选,不指定时,一直拷贝到相应方向的尽头

必须保证end>star且为正,否则返回空数组

const arr = [0, 1, 2, 3, 4, 5]
console.log(arr.slice(2, 4))	// [ 2, 3 ]
console.log(arr.slice(2, 5))	// [ 2, 3, 4 ]
console.log(arr.slice(2, 6))	// [ 2, 3, 4, 5 ]

console.log(arr.slice(5, 2))	// []
console.log(arr.slice(-1, 2))	// []
复制代码

arr.flat(depth)

按指定深度展开多维数组,返回一个没有空值新数组(自动剔除空项)

const arr1 = [1, 2, [3, 4]]
arr1.flat()
console.log(arr1.flat())	// [ 1, 2, 3, 4 ]
console.log(arr1)	// [1, 2, [3, 4]]
复制代码

———-

以下方法会改变原数组:

arr.fill(填充物,star,end)

用一个固定值填充数组中从star下标到end下标的全部元素,不包括end

必须保证end>star且为正,star、end大于length-1时,不会改变length

const arr = [0, 1, 2, 3, 4, 5]
arr.fill(8,2,7)
console.log(arr)	// [ 0, 1, 8, 8, 8, 8 ]

const arr2 = [0, 1, 2, 3, 4, 5]
arr.fill(8,7,2)
console.log(arr2)	// [ 0, 1, 2, 3, 4, 5 ]

const arr3 = [0, 1, 2, 3, 4, 5]
arr.fill(8,-1,7)
console.log(arr3)	// [ 0, 1, 2, 3, 4, 5 ]
复制代码

arr.push(data1,data2…)

将一个或多个元素添加到数组的末尾,并返回该数组的新长度

let arr = [0, 1, 2, 3, 4, 5]
let l = arr.push(6, 7, 8, 9)
console.log(arr)	// [0,1,2,3,4,5,6,7,8,9]
console.log(l)	// 10
复制代码

arr.pop()

从数组中删除最后一个元素,并返回该元素的值

let arr = [0, 1, 2, 3, 4, 5]
let l = arr.pop()
console.log(arr)	// [ 0, 1, 2, 3, 4 ]
console.log(l)	// 5
复制代码

arr.unshift(data1,data2…)

将一个或多个元素添加到数组的开头,并返回该数组的新长度

let arr = [3, 4, 5]
let l = arr.unshift(0, 1, 2)
console.log(arr)	// [0,1,2,3,4,5]
console.log(l)	// 6
复制代码

arr.shift()

从数组中删除第一个元素,并返回该元素的值

let arr = [0, 1, 2, 3, 4, 5]
let l = arr.shift()
console.log(arr)	// [ 1, 2, 3, 4, 5 ]
console.log(l)	// 0
复制代码

arr.reverse()

翻转原数组,返回颠倒后的数组(原数组也会改变)

let arr = [0, 1, 2, 3, 4, 5]
let newArr = arr.reverse()
console.log(newArr)	// [ 5, 4, 3, 2, 1, 0 ]
console.log(arr)	// [ 5, 4, 3, 2, 1, 0 ]
复制代码

arr.splice(star,删除的个数,添加项1,添加项2…)

splice会在原数组上进行增删改,以数组的形式返回被修改的内容

let arr = ['a', 'b', 'c', 'd', 'e', 'f']
let newArr = arr.splice(1, 4, '6', '7', '8')
console.log(arr)	// [ 'a', '6', '7', '8', 'f' ]
console.log(newArr) // [ 'b', 'c', 'd', 'e' ]
复制代码

arr.sort((a, b) => a – b或b – a)

不指定参数,排序结果由具体实现决定

可以指定参数为一个回调函数,元素按照转换为的字符串的各个字符的Unicode位点重新排序

返回a-b,按Unicode位点从小到大重新排序

返回b-a,按Unicode位点从大到小重新排序

let arr1 = [1,4,0,3,2]
let newArr1 = arr1.sort((a,b)=>a-b)
console.log(arr1)	// [ 0, 1, 2, 3, 4 ]
console.log(newArr1)	// [ 0, 1, 2, 3, 4 ]

let arr2 = [1,4,0,3,2]
let newArr2 = arr1.sort((a,b)=>b-a)
console.log(arr2)	// [ 4, 3, 2, 1, 0 ]
console.log(newArr2)	// [ 4, 3, 2, 1, 0 ]
复制代码

———-

ES5 新增数组方法:

(跳过undefined的项)

arr.forEach((item, index) => {})

遍历

返回值总是undefined(指定return也无效)

let arr = [0, 1, 2, 3, 4]
let a = arr.forEach(item => 1)
console.log(a)	// undefined
复制代码

arr.map((item, index) => {})

遍历&收集返回的项

返回新数组

let arr = [0, 1, 2, 3, 4]
let a = arr.map(item => item+1)
console.log(arr)	// [ 0, 1, 2, 3, 4 ]
console.log(a)		// [ 1, 2, 3, 4, 5 ]
复制代码

arr.filter((item, index) => 条件判断)

过滤&保留return true的项

返回新数组

let arr = [0, 1, 2, 3, 4]
let a = arr.filter(item => item>=2)
console.log(arr)	// [ 0, 1, 2, 3, 4 ]
console.log(a)		// [ 2, 3, 4 ]
复制代码

arr.reduce((sum, item, index) => sum + item, sum初始值)

遍历&累计求和

返回累计结果

let arr = [0, 1, 2, 3, 4]
let a = arr.reduce((sum, item, index) => sum + item, 0)
console.log(arr)	// [ 0, 1, 2, 3, 4 ]
console.log(a)		// 10
复制代码

arr.every((item, index) => 条件判断)

遍历&判断是否都满足条件

返回布尔值

let arr = [0, 1, 2, 3, 4]
let a = arr.every((item, index) => item>1)
console.log(arr)	// [ 0, 1, 2, 3, 4 ]
console.log(a)		// false
复制代码

arr.some((item, index) => 条件判断)

遍历&判断是否存在满足条件的项

返回布尔值

let arr = [0, 1, 2, 3, 4]
let a = arr.some((item, index) => item>1)
console.log(arr)	// [ 0, 1, 2, 3, 4 ]
console.log(a)		// true
复制代码

———-

ES6 新增数组方法:

(跳过undefined的项)

arr.find((v, i, arr)=>{函数体})

index和array为可选项

返回数组中第一个满足所提供测试函数的元素的值,否则返回 undefined

const arr = [0, 1, 2]
console.log(arr.find((v, i, arr) => v > 3))	// undefined
复制代码

arr.findIndex((v, i, arr)=>{函数体})

index和array为可选项

返回数组中第一个满足所提供测试函数的元素的下标,否则返回 -1

const arr = [0, 1, 2]
console.log(arr.findIndex((v, i, arr) => v > 3))	// -1
复制代码

———-

ES7 新增数组方法:

arr.includes(目标,开始下标)

目标是否在数组里

返回布尔值

查找方向:首至尾

const arr = [0, 1, 2]
console.log(arr.includes(3))	// false
复制代码

arr.indexOf(目标,开始下标)

元素第一次出现的下标(首至尾)

返回目标第一次出现的下标,没找到返回-1

const arr = ['0', '1', '2']
console.log(arr.indexOf('0'))	// 0
console.log(arr.indexOf('0', 1))	// -1
console.log(arr.indexOf('3'))	// -1
复制代码

arr.lastIndexOf(目标,开始下标)

元素第一次出现的下标(尾至首)

返回目标第一次出现的下标,没找到返回-1

查找方向:尾至首(查找方向不会影响下标)

const arr = ['0', '1', '2']
console.log(arr.lastIndexOf('0'))	// 0
console.log(arr.lastIndexOf('0', 2))	//0
console.log(arr.indexOf('3'))	// -1
复制代码

———-

数组解构赋值(ES6新增)

按照一个模式, 从数组中提取值, 赋予给变量(即将数组中的目标项的值,赋值给一群变量)

结构赋值要求一一对应,不需要的值直接(保留逗号)跳过

let arr = [1, 2, 3, 4]
// 完全解构
let [a, b, c, d] = arr
console.log(a, b, c, d)		// 1 2 3 4
// 不完全解构
let [a, , c, d] = arr
console.log(a, c, d)		// 1 3 4
复制代码

———-

展开运算符(…)

可以将数组的项展开

// 展开数组
let arr = [1, 3, 5, 7]
console.log(...arr)		// 1 3 5 7

// 拼接两个数组
let arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
let newArr = [...arr1, ...arr2]
console.log(newArr)		// [ 1, 2, 3, 4, 5, 6 ]

// 求数组最大值
let arr3 = [3, 100, 20]
let max = Math.max(...arr3)
console.log(max)		// 100
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享