JS 数组 API
数组 API
split 和 join 的区别
- split 是 String 的方法,以指定字符分割字符串为数组;
- join 是 Array 的方法,以指定字符拼接数组元素为字符串;
- 二者互为相反的操作;
数组的 pop、push、unshift、shift 的区别
- pop,弹出数组的最后一个元素,返回值是弹出的元素;
- push,在数组末尾压入一个元素,返回值是数组的长度;
- unshift,在数组开头压入一个元素,返回值是数组的长度;
- shift,弹出数组的第一个元素,返回值是弹出的元素;
- 以上 4 个操作都有副作用:会改变原数组;
数组的纯函数 API
纯函数 API 要满足两个条件:
- 不改变原数组;
- 返回一个数组;
concat
拼接数组,并返回新数组;
map
遍历数组,对数组中的每个元素进行指定操作,然后返回新数组;
filter
过滤数组,以某个条件过滤数组元素,返回过滤后的新数组;
slice
切割数组,没有参数时为浅拷贝,返回新数组;
非纯函数 API
- pop
- push
- unshift
- shift
- forEach 对数组的每个元素执行一次指定的操作;
- some 对数组的每个元素执行一次测试,返回布尔值;
- reduce 遍历数组,对数组的每个元素执行一次操作,并将结果作为下一次操作起始参数,最后返回最终结果;
- splice 从指定索引开始截取指定个数的元素,并插入新的元素,返回值为截取的元素;
reduce
数组的累积或统计操作都可以使用 reduce;
详细说明,参见MDN;
数组 flat(拍平)
将嵌套数组转换为一维数组,如下:
1 | const arr = [1, 2, [3, 4, [5, 6, [7, 8], 9], 10], 11]; |
1 | function flat(arr) { |
数组去重
1 | // 使用遍历 |
1 | // 使用 set |
Map 和 Set
Map 和 Object 的区别
api 不同;
1
2
3
4
5
6
7
8
9
10
11
12const map = new Map();
map.set("a", 1); // 设置键值
map.get("a"); // 返回指定键的值
map.has("a"); // 是否存在指定的键值对
map.delete("a"); // 删除指定的键值对
map.size(); // 返回 map 中键值对的数量
map.clear(); // 清空 map
map.forEach(); // 迭代方法
map.keys(); // 返回所有键
map.values(); // 返回所有值
map.entries(); // 返回所有键值对组成的数组Map 可以以任意类型为键, Object 的键不能是引用类型;
Map 是有序结构,Object 是无序结构;
Map 操作快;
Set 和 Array 的区别
- api Set 的实例属性和方法与 Map 相同;
- Set 是无序结构,Array 是有序结构;
- Set 元素不能重复;
- Set 操作快;
WeakMap 和 WeakSet
- 弱引用,防止内存泄漏;
- WeakMap 只能用对象作为 key;
- WeakSet 只能用对象作为 value;
- WeakMap 只有 get、set、has、delete 方法;
- WeakSet 只有 length 属性和 add、delete、has 方法;
WeakMap 的使用场景:
1 | // 关联两个对象,但又不想成为对象的属性 |