1.ES5的方法
- Array.isArray(obj)
用于确定传递的值是否是一个 Array。
优于 instanceof,因为Array.isArray能检测iframes。
console.log(Array.isArray());
console.log(Array.isArray([]));
console.log(Array.isArray(Array.prototype));
- arr.forEach 遍历数组
[1, 2, 3].forEach((value, index, item) => {
console.log(value);
})
- arr.map
[1, 2, 3].map(item => item*2);
- arr.filter
[1, 2, 3].filter(item => item != 2);
- arr.every
[1, 2, 3, 4].every(item => item == 1);
- arr.some
[1, 2, 3, 4].some(item => item == 5);
- arr.reduce(callback[, initialValue])
对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
let res = [1, 2, 3].reduce((acc, cur, ind) => {
return acc + cur
})
console.log(res)
let res2 = [{c: 1}, {c: 2}, {c: 3}].reduce((acc, cur, ind) => acc + cur.c, 0)
console.log(res2)
- arr.reduceRight()
var res = [[0, 1], [2, 3], [4, 5]].reduceRight((a, b) => a.concat(b), []);
console.log(res)
- arr.splice(start[, deleteCount[, item1[, item2[, ...]]]]) 添加、删除、替换数组成员
const arr = [1, 2, 3, 4, 5, 6, 7, 8];
const arr1 = arr.splice(5);
console.log(arr, arr1)
const arr2 = arr.splice(2, 1);
console.log(arr, arr2)
const arr3 = arr.splice(1, 1, 5, 5, 5)
console.log(arr, arr3)
- arr.slice([begin[, end]]) 截取数组
console.log([1, 2, 3, 4].slice(1))
console.log([1, 2, 3, 4].slice(-1))
console.log([1, 2, 3, 4].slice(1, 2))
- 其他一些方法
console.log([1, 2, 3].pop())
const arrB = [1, 2, 3];
console.log(arrB.push(4, 5), arrB)
console.log([1, 2, 3].shift())
const arrF = [1, 2, 3];
console.log(arrF.unshift(4, 5), arrF)
console.log([1, 2, 3].indexOf(2, 1))
console.log([1, 2, 3, 1].lastIndexOf(1))
let arr = [1, 2];
let newArr = arr.concat([3, 4]);
console.log(arr, newArr);
console.log([1, 2, 3].join(''))
console.log([1, 2, 3].join())
const arr = [1, 2, 3, 4];
console.log(arr, arr.reverse())
const arr = [{index: 3}, {index: 1}, {index: 2}];
console.log(arr.sort((a, b) => b.index - a.index))
2.ES6新增方法
- Array.from(arrayLike[, mapFn[, thisArg]])
从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例
任何有length属性的对象,都可以通过Array.from方法转为数组,而此时扩展运算符就无法转换。
console.log(Array.from([1, 2, 3], x => x + x));
console.log(Array.from(new Set(['foo', 'bar', 'baz', 'foo'])));
console.log(Array.from({ length: 3 }));
- Array.of(element0[, element1[, ...[, elementN]]])
用于将一组值,转换为数组。基本上可以用来替代Array()或new Array()
console.log(Array.of());
console.log(Array.of(1, 2));
console.log(Array.of(undefined));
- arr.keys(), arr.values(), arr.entries()
for (let index of ['a', 'b'].keys()) {
console.log(index);
}
for (let elem of ['a', 'b'].values()) {
console.log(elem);
}
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
}
- arr.find, arr.findIndex
返回数组中满足提供的测试函数的第一个元素的值(索引)
const array = [5, 12, 8, 130, 44];
console.log(array.find(element => element > 10));
console.log(array.findIndex(element => element > 10));
- arr.copyWithin(target[, start[, end]])
浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。
console.log([1, 2, 3, 4, 5].copyWithin(0, 3))
console.log([1, 2, 3, 4, 5].copyWithin(0, 3, 4))
console.log([1, 2, 3, 4, 5].copyWithin(-1, 1, 2))
- arr.includes(valueToFind[, fromIndex])
用来判断一个数组是否包含一个指定的值 (ES2016)
console.log([1, 2, 3].includes(2))
console.log([1, 2, 3].includes(2, 2))
console.log([1, 2, 3].includes(1, -2))
- arr.flat([depth])
会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。 (ES2019)
[1, 2, [3, [4, 5]]].flat()
[1, 2, [3, [4, 5]]].flat(2)
[1, [2, [3]]].flat(Infinity)
- arr.flatMap(callback)
首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。(草稿阶段)
[2, 3, 4].flatMap((x) => [x, x * 2])
参考
developer.mozilla.org/zh-CN/docs/…