一、new Map()
const m = new Map([
["小明", 100],
["小红", 90],
["小兰", 99]
]);
m.size; // 3
m.set("小明", 100).set("小红", 100);// [["小明", 100], ["小红", 100]]
m.get("小红"); // 100
m.has("小明"); // true
m.delete("小明")
m.clear(); // null
* 选择 Object 还是 Map
对于多数 Web 开发任务来说,选择 Object 还是 Map 只是个人偏好问题,影响不大。不过,对于在乎内存和性能的开发者来说,对象和映射之间确实存在显著的差别。
(1)内存占用
Object 和 Map 的工程级实现在不同浏览器间存在明显差异,但存储单个键 / 值对所占用的内存数量都会随键的数量线性增加。批量添加或删除键 / 值对则取决于各浏览器对该类型内存分配的工程实现。不同浏览器的情况不同,但给定固定大小的内存,Map 大约可以比 Object 多存储 50 % 的键 / 值对。
(2)插入性能
向 Object 和 Map 中插入新键 / 值对的消耗大致相当,不过插入 Map 在所有浏览器中一般会稍微快一点儿。对这两个类型来说,插入速度并不会随着键 / 值对数量而线性增加。如果代码涉及大量插入操作,那么显然 Map 的性能更佳。
(3)查找速度
与插入不同,从大型 Object 和 Map 中查找键 / 值对的性能差异极小,但如果只包含少量键 / 值对,则 Object 有时候速度更快。在把 Object 当成数组使用的情况下(比如使用连续整数作为属性),浏览器引擎可以进行优化,在内存中使用更高效的布局。这对 Map 来说是不可能的。对这两个类型而言,查找速度不会随着键 / 值对数量增加而线性增加。如果代码涉及大量查找操作,那么某些情况下可能选择 Object 更好一些。
(4)删除性能
使用 delete 删除 Object 属性的性能一直以来饱受诟病,目前在很多浏览器中仍然如此。为此,出现了一些伪删除对象属性的操作,包括把属性值设置为 undefined 或 null。对大多数浏览器引擎来说,Map 的 delete ()操作都比插入和查找更快。如果代码涉及大量删除操作,那么毫无疑问应该选择 Map。
二、JS 数组对象过滤——filter, find, some, every
(y)filter() \find()
let arr1 = [1, 2, 3, 4]
let arr2 = arr1.filter(item => item === 1)
console.log(arr2,) // [1]
(2)some()
用于检测数组中的元素是否满足指定条件,会依次执行数组的每个元素,如果有一个元素满足条件,则表达式返回true, 剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false
let someArr1 = [1, 2, 3, 4]
let someArr2 = someArr1.some(item => item === 1)
console.log(someArr2, 'someArr1') // true someArr1
(3)every()
方法用于检测数组所有元素是否都符合指定条件
(4)map()
对数组中的每个元素进行计算, 得到一个新数组
var newArray3 = [1, 2, 3, 4]
newArray3 = numArr.map(item => {
item = item + 1;
return item;
});
//newArray3 = [2, 3, 4, 5]
三、(...)延展
let arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
let a = [...arr1, ...arr2]
console.log(a);//[1,2,3,4,5,6]
console.log(...arr1);//1 2 3
四、reduce()
参数:
prev 必需。累计器累计回调的返回值; 表示上一次调用回调时的返回值,或者初始值 init;
cur 必需。表示当前正在处理的数组元素;
index 可选。表示当前正在处理的数组元素的索引,若提供 init 值,则起始索引为 - 0,否则起始索引为1;
arr 可选。表示原数组;
init 可选。表示初始值。
例子:求和
let arr = [1,2,3]
let sum = arr.reduce(function (prev, cur, index, arr) {
return prev + cur
}, init);
console.log(sum);//6
五、new Set() 去重
元素操作 .add(),.delete(),.has(),.clear(),.size
// init
let s = new Set()
// .add()
s.add(1).add(2).add(2) // => Set(2) {1, 2}
// .size
s.size // => 2
// .has()
s.has(1) // => true
s.has(2) // => true
s.has(3) // => false
// .delete()
s.delete(2); // => true
s.has(2) // => false
例子:
let arr = [1,2,3,1]
let list = new Set(arr)
console.log(list);//{1,2,3}
//转为数组
let a = [...list]//[1,2,3]
let b = Array.from(list)//[1,2,3]