数组空位
数组可以使用一串逗号来创建空位,逗号前面为一项,值为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
复制代码