JS 数组方法速查表

影响原数组的方法(原型方法)

方法名引入版本功能描述使用示例
popES1移除并返回最后一个元素[1, 2, 3].pop(); // 3, arr: [1, 2]
pushES1添加元素到末尾[1, 2].push(3); // [1, 2, 3]
reverseES1反转数组顺序[1, 2, 3].reverse(); // [3, 2, 1]
shiftES1移除并返回第一个元素[1, 2, 3].shift(); // 1, arr: [2, 3]
sortES1排序数组[3, 1, 2].sort(); // [1, 2, 3]
spliceES1添加/移除元素[1, 2, 3].splice(1, 1, 4); // [1, 4, 3]
unshiftES1添加元素到开头[2, 3].unshift(1); // [1, 2, 3]
copyWithinES6复制数组部分到指定位置[1, 2, 3, 4].copyWithin(0, 2); // [3, 4, 3, 4]
fillES6用值填充数组[1, 2, 3].fill(0); // [0, 0, 0]

不影响原数组的方法(原型方法)

方法名引入版本功能描述使用示例
concatES1合并数组[1, 2].concat([3, 4]); // [1, 2, 3, 4]
joinES1元素连接为字符串['a', 'b'].join('-'); // 'a-b'
sliceES1返回数组部分[1, 2, 3].slice(1); // [2, 3]
toLocaleStringES1转换为本地化字符串[1, 2].toLocaleString(); // '1,2'
toStringES1转换为字符串[1, 2].toString(); // '1,2'
everyES5检查是否所有元素满足条件[1, 2, 3].every(x => x > 0); // true
filterES5返回满足条件的元素[1, 2, 3].filter(x => x > 1); // [2, 3]
forEachES5对每个元素执行回调[1, 2].forEach(x => console.log(x)); // 1, 2
indexOfES5返回元素首次出现的索引[1, 2, 3].indexOf(2); // 1
lastIndexOfES5返回元素最后出现的索引[1, 2, 1].lastIndexOf(1); // 2
mapES5对每个元素应用函数[1, 2].map(x => x * 2); // [2, 4]
reduceES5从左到右累积计算[1, 2, 3].reduce((a, b) => a + b, 0); // 6
reduceRightES5从右到左累积计算[1, 2, 3].reduceRight((a, b) => a + b, 0); // 6
someES5检查是否任一元素满足条件[1, 2, 3].some(x => x > 2); // true
entriesES6返回索引和值的迭代器[...[1, 2].entries()]; // [[0, 1], [1, 2]]
findES6返回第一个满足条件的元素[1, 2, 3].find(x => x > 1); // 2
findIndexES6返回第一个满足条件的索引[1, 2, 3].findIndex(x => x > 1); // 1
keysES6返回索引的迭代器[...[1, 2, 3].keys()]; // [0, 1, 2]
valuesES6返回值的迭代器[...[1, 2, 3].values()]; // [1, 2, 3]
includesES2016检查是否包含元素[1, 2, 3].includes(2); // true
flatES2019展平嵌套数组[1, [2, [3]]].flat(2); // [1, 2, 3]
flatMapES2019映射并展平结果[1, 2].flatMap(x => [x, x * 2]); // [1, 2, 2, 4]
atES2022返回指定索引的元素[1, 2, 3].at(-1); // 3
findLastES2023返回最后一个满足条件的元素[1, 2, 3].findLast(x => x > 1); // 3
findLastIndexES2023返回最后一个满足条件的索引[1, 2, 3].findLastIndex(x => x > 1); // 2
toReversedES2023返回反转后的新数组[1, 2, 3].toReversed(); // [3, 2, 1]
toSortedES2023返回排序后的新数组[3, 1, 2].toSorted(); // [1, 2, 3]
toSplicedES2023返回添加/移除元素后的新数组[1, 2, 3].toSpliced(1, 1); // [1, 3]
withES2023返回替换指定索引元素后的新数组[1, 2, 3].with(1, 4); // [1, 4, 3]
groupES2024按条件分组为对象[1, 2, 3].group(x => x % 2); // 0: [2], 1: [1, 3]
groupToMapES2024按条件分组为 Map[...[1, 2, 3].groupToMap(x => x % 2)]; // [[0, [2]], [1, [1, 3]]]

静态方法(不影响原数组)

方法名引入版本功能描述使用示例
Array.isArrayES5检查是否为数组Array.isArray([1, 2]); // true
Array.fromES6从可迭代对象创建数组Array.from('abc'); // ['a', 'b', 'c']
Array.ofES6从参数创建数组Array.of(1, 2, 3); // [1, 2, 3]
Array.fromAsyncES2024从异步可迭代对象创建数组await Array.fromAsync((async function*() { yield 1; yield 2; }())); // [1, 2]