实例方法
includes()
判断数组中是否包含某个值,返回 true\false 用以替代 ES5 的 indexOf
find()
用于找到第一个符合条件的数组成员
findIndex()
返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回 -1。
静态方法
Array.from()
将两类对象转为真正的数组:类数组对象(array-like object)和可迭代对象(iterable)。Array.from() 方法从一个类似数组或可迭代对象创建一个新的、浅拷贝的数组实例。返回值:一个新的数组实例。
// from 将类数组对象转为数组
let str = 'hello'
Array.from(str) // ['h', 'e', 'l', 'l', 'o']
// from 对现有数组执行浅拷贝
let arr1 = [{a:'lxx'}, 1, 2, 3, 4]
let arr2 = Array.from(arr1)
arr2[0].a = 'xxx' // 引用类型值相互影响
// from 也能转换带有必要属性的自定义对象
let arrayObj = {
0:1,
1:2,
2:3,
3:4,
length:4
}
Array.from(arrayObj) // [1, 2, 3, 4] 不带length属性结果为空数组
// 从类数组对象 arguments 生成数组
function fun(n1,n2) {
console.log(Array.from(arguments))
}
fun(1,2,3) // [1, 2, 3]
映射转换
Array.from() 第二个参数是映射函数,相当于 map。此函数会将类数组对象的每一个值转换为目标形式,并将其存储在目标数组的对应位置上。
let arr1 = [1, 2, 3, 4]
let arr2 = Array.from(arr1, v => {
return v * 2
})
arr2 // [2, 4, 6, 8]
举个例子 🌰
将数组中布尔值为 false 的成员转为 0
Array.from([1, , 2, , 3], (n) => n || 0) // [1, 0, 2, 0, 3]
1 || 0 == 1 undefined || 0 == 0
替代 Array.prototype.slice.call()
尽管这种技巧所用的代码量更少,但调用 Array.prototype.slice.call(arrayLike) 并没有明确体现出“要将类数组对象转换为数组”的目的。
function toArray() {
return Array.prototype.slice.call(arguments)
}
Array.of()
将一组参数转换为数组。
let arr = Array.of(1, 2, 3, 4) // [1, 2, 3, 4]
这个方法的主要目的是弥补数组构造函数 Array() 的不足。因为参数个数不同,会导致 Array() 的行为有差异。
Array() // []
Array(3) // [ , , ,]
Array(3, 11, 8) // [3, 11, 8]
Array 方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于2个时,Array() 才会返回由参数组成的新数组。参数个数只有一个时,实际上是指定数组长度。
Array.of() 基本上可以替代 Array() 或 new Array(),并且它的行为非常统一,不存在由于参数不同而导致的重载。