Javascript Array 方法总结

堆栈 & 队列

  • push 添加到末尾,返回修改后的长度
  • pop 移除最后一项,返回移除的项
  • unshift 添加到前端,返回修改后的长度
  • shift 移除第一项,取得数组第一项

pushunshift 支持插入多个元素,如下

arr.push(1, 2, 3);
arr.unshift(1, 2, 3);

查询

  • indexOf 传入 value,返回 index | -1
  • includes 传入 value,返回 boolean
  • findIndex 传入 function,返回 index | -1
  • find 传入 function,返回 value | undefined

重排序

  • reverse 反转数组,返回反转后的数组
  • sort 默认按升序排列, 返回排序后的数组

cmp 函数返回值 < 0 靠前,> 0 靠后

[2, 1, 3].sort((a, b) => a - b); 
// @return: [1, 2, 3] 等价于 [2,1,3].sort()

[{v:2}, {v:1}, {v:3}].sort((a, b) => b.v - a.v); 
// @return: [{v:2}, {v:1}, {v:1}]

操作方法

  • slice 返回新数组,可用值拷贝 slice(0)
    • slice (start, end): 返回 startend 位置的项(不包括结束位置)
    • slice (start) start: 位置到末尾的所有项
  • splice 返回被删除的项
    • splice (start, count): 从 start 位置开始删除 count 个项
    • splice (start, 0, ...inserts): 从 start 位置开始插入 inserts
    • splice (start, count, ...inserts): 先删再插

注意,slice 返回新数组而原数组不变,而 splice 返回被删除的数组,原数组也会改变。slice 相当于 python 里切片语法,例如 arr[1:3], arr[-2] 等价于 arr.slice(1, 3), arr.slice(-2)

const a = [1, 2, 3];
const b = a.slice(-2);
// b: [2, 3] 最后2个元素 
// a: [1, 2, 3]

const c = a.splice(1, 0, 6, 7);
// c: [] 没有删除值
// a: [1, 6, 7, 2, 3]

迭代方法

  • every 每一项返回 true 则返回 ture
  • some 任意一项返回 true 则返回 ture
  • filter 返回返回 true 的数组
  • map 返回每次函数调用的结果组成的数组
  • forEach 没有返回值, 与 for 类似

回调参数都是 (item[, index[, array]]), forEachmap 执行过程中无法通过 breakreturn 中断,一旦执行就必须执行到末尾,如果需要截断,可以用 some 代替,中断时返回 true 即可。

const a = [1, 2, 3, 6, 4, 5];
const b = a.filter(item => item < 5);
// b: [1, 2, 3, 4] 返回小于5的结果
// a: [1, 6, 7, 2, 3] 原数组不变

const c = a.some(item => {
    console.log(item);
    return item > 4;
})
// log: 1, 2, 3, 6 找到 6 时返回 true,中断循环
// c: true 找到结果

归并方法

  • reduce 累积所有,返回累积的结果
  • reduceRight 从后向前累积

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

const arr = [{ n: 1 }, { n: 2 }, { n: 3  }];
const data = { v: 2, sum: 0 };
arr.reduce((acc, cur) => (acc.sum += cur.n, acc), data);
// return: { v: 2, sum: 6 }

Reference

  1. Array - Javascript | MDN