Javascript Array 方法总结
堆栈 & 队列
- push 添加到末尾,返回修改后的长度
- pop 移除最后一项,返回移除的项
- unshift 添加到前端,返回修改后的长度
- shift 移除第一项,取得数组第一项
push
和 unshift
支持插入多个元素,如下
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)
: 返回start
到end
位置的项(不包括结束位置)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]]), forEach
和 map
执行过程中无法通过 break
或 return
中断,一旦执行就必须执行到末尾,如果需要截断,可以用 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 }