1、增、删、改
按序:
index | name | function | comment |
---|---|---|---|
1 | push(e) | 在数组末尾插入e | - |
2 | unshift(e) | 在数组开头插入e | - |
3 | splice(start, delete_cnt, e1, e2, …, en) | 从start开始删除元素,然后在start处插入e1,e2,…,en | 细节+示例 |
4 | pop() | 将数组末尾e弹出 | - |
5 | shift() | 将数组开头e弹出 | - |
5 | splice(start, 1, e) | 将start处的元素替换为e | - |
2、查
index | name | function | comment |
---|---|---|---|
1 | for | - | for(let i=0;i<arr.length;i++){ …arr[i]… } |
2 | for of | - | for(let i of arr){ …i… } |
3 |
3、连接数组
有arr1, arr2, arr3,需要按1\2\3的顺序连接
index | name | function | comment |
---|---|---|---|
1 | … | 解构运算符 | arr1 = [...arr1, ...arr2, ...arr3] |
2 | old.concat(new1, new2, …) | 不会改变原数组,要声明新数组来接 | arr = arr1.concat(arr2,arr3) |
4、与字符串互转
// string => Array
arr = str.split(regex);
// Array => sting
str = arr.join(s);
或者
str = arr.toString(); //带逗号
5、切片
Array.prototype.slice(start, end) 可用于复制原数组中(start, end] 的子数组,是 仅适合与一维数组的深拷贝, 很常用的几种情景如下:
// (1)深拷贝一个一维数组
recursion(arr.slice())
// (2)从start开始的剩余数组
arr.slice(start)
// (3)start或end用负数表示倒数第k个
[1,2,3].slice(-1); // [3]
[1,2,3].slice(-2,-1); // [2]
6、遍历并操作
index | name | function | comment |
---|---|---|---|
1 | map(fn(val, idx, arr), _this) | 给每个元素执行fn操作并返回新数组 | let root = arr.map(v=>Math.sqrt(v)) 示例 |
2 | every | 所有元素执行fn返回true结果才为true | - |
3 | some | 存在元素执行fn返回true结果就为true | - |
4 | filter | 返回一个执行fn为true的元素组成的数组 | - |
5 | forEach | 同map,但无返回值 | - |
7、原地反转数组
arr = [1,2,3];
arr.reverse();
arr; // [3,2,1]
8、原地稳定排序数组
记得指定排序规则fn,fn返回值小于0升序,大于0降序,等于0按初始顺序(稳定排序)
arr = [1,11,20,2];
arr.sort();
arr; // [ 1, 11, 2, 20 ]
arr.sort((a,b) => a-b);
arr; // [ 1, 2, 11, 20 ]
9、累计器
MDN参考 暂不常用到
10、快速技巧
(1)使用Array.prototype.slice()将类数组对象转换为数组
function fn() {
return Array.prototype.slice.call(arguments);
}
arr = fn(1,2,3)
结果为 [ 1, 2, 3 ]
, 作用同 Array.from