前言
在日常的前端开发中,我们需要处理各种数据,如何高效地处理这些数据是我们必须掌握的技能。ECMAScript 2020引入了一些新特性,配合Map、Set、WeakMap和WeakSet可以更好地帮助我们处理数据。
Map
Map是一种集合类型,它可以存储任何类型的键值对。在ECMAScript 2020中,Map引入了一些新特性。
1. Map的初始化
Map可以通过定义一个二维数组来初始化,第一维表示键,第二维表示值。
const map = new Map([ ['foo', 1], ['bar', 2] ]);
2. Map.prototype.upsert方法
在ECMAScript 2020中,Map新增了一个upsert方法,用于更新Map中的值。upsert方法接收两个参数,第一个参数表示key,第二个参数表示value。如果Map中已经有了key,则更新其对应的value,否则就添加一个新的键值对。
const map = new Map([ ['foo', 1], ['bar', 2] ]); map.upsert('foo', 3); // 更新foo对应的value为3 map.upsert('baz', 4); // 添加一个新的键值对baz:4
3. Map.prototype.deleteAll方法
在ECMAScript 2020中,Map新增了一个deleteAll方法,用于删除Map中所有键值对。
const map = new Map([ ['foo', 1], ['bar', 2] ]); map.deleteAll(); // 删除所有键值对
Set
Set是一种集合类型,它可以存储任何类型的数据。在ECMAScript 2020中,Set引入了一些新特性。
1. Set添加重复数据
在ECMAScript 2020中,Set可以添加重复数据,但只会保存一个。
const set = new Set(); set.add(1); set.add(2); set.add(1); // 添加重复数据1,但只会保存一个 console.log(set); // Set { 1, 2 }
2. Set.prototype.union方法
在ECMAScript 2020中,Set新增了一个union方法,用于取两个Set集合的并集。
const set1 = new Set([1, 2, 3]); const set2 = new Set([3, 4, 5]); const unionSet = set1.union(set2); console.log(unionSet); // Set { 1, 2, 3, 4, 5 }
3. Set.prototype.intersection方法
在ECMAScript 2020中,Set新增了一个intersection方法,用于取两个Set集合的交集。
const set1 = new Set([1, 2, 3]); const set2 = new Set([3, 4, 5]); const intersectionSet = set1.intersection(set2); console.log(intersectionSet); // Set { 3 }
WeakMap
WeakMap是一种集合类型,它的键只能是对象,值可以是任何类型。在ECMAScript 2020中,WeakMap引入了一些新特性。
1. WeakMap.prototype.getter/setter方法
在ECMAScript 2020中,WeakMap新增了getter/setter方法,可以对WeakMap中的键值对进行操作。
const wm = new WeakMap(); const obj = {}; wm.set(obj, 1); console.log(obj.val); // undefined console.log(obj.val = 2); // 2 console.log(wm.get(obj)); // 2
2. WeakMap.prototype.upsert方法
在ECMAScript 2020中,WeakMap新增了一个upsert方法,用于更新WeakMap中的值。upsert方法接收两个参数,第一个参数表示key,第二个参数表示value。如果WeakMap中已经有了key,则更新其对应的value,否则就添加一个新的键值对。
const wm = new WeakMap(); const obj = {}; wm.upsert(obj, 1); // 添加一个新的键值对obj:1 wm.upsert(obj, 2); // 更新obj对应的value为2
3. WeakMap.prototype.deleteAll方法
在ECMAScript 2020中,WeakMap新增了一个deleteAll方法,用于删除WeakMap中所有键值对。
const wm = new WeakMap(); const obj1 = {}; const obj2 = {}; wm.set(obj1, 1); wm.set(obj2, 2); wm.deleteAll(); // 删除所有键值对
WeakSet
WeakSet是一种集合类型,它的元素只能是对象。在ECMAScript 2020中,WeakSet引入了一些新特性。
1. WeakSet.prototype.upsert方法
在ECMAScript 2020中,WeakSet新增了一个upsert方法,用于更新WeakSet中的元素。upsert方法接收一个参数,表示要添加或更新的元素。
const ws = new WeakSet(); const obj1 = {}; const obj2 = {}; ws.upsert(obj1); // 添加一个新的元素obj1 ws.upsert(obj1); // 不会重复添加obj1 ws.upsert(obj2); // 添加一个新的元素obj2
2. WeakSet.prototype.deleteAll方法
在ECMAScript 2020中,WeakSet新增了一个deleteAll方法,用于删除WeakSet中所有元素。
const ws = new WeakSet(); const obj1 = {}; const obj2 = {}; ws.add(obj1); ws.add(obj2); ws.deleteAll(); // 删除所有元素
总结
ECMAScript 2020引入的新特性为处理数据提供了更多便利方式,通过Map、Set、WeakMap和WeakSet等集合类型,我们可以更加高效地处理各种数据。在实际开发中,我们可以根据数据类型和操作特点选择合适的集合类型,从而更好地处理数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65aa7ad7add4f0e0ff4142f7