ES6中的Set 和 Map
-
Set
Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是 唯一 的。
let myArray = ['value1', 'value2', 'value3', 'value1', 'value2',]; let mySet = new Set(myArray); let newArray = Array.from(mySet); console.log(newArray); // ["value1", "value2", "value3"]
可以简化一下
let myArray = ['value1', 'value2', 'value3', 'value1', 'value2',]; let newArray = [...new Set(myArray)]; console.log(newArray); // ["value1", "value2", "value3"]
缺点
对象不可以去重
-
Map
let myArray = ['value1', 'value2', 'value3', 'value1', 'value2']; let myMap = new Map(); let newArray = myArray.filter((val) => !myMap.has(val) && myMap.set(val, 1)); console.log(newArray); // ["value1", "value2", "value3"]
改进一下,支持对象去重(正则表达式还是有点问题)
let myArray = [1, '2', 'value3', 1, '2', null, null, NaN, NaN, {"key": "value"}, {"key": "value"}, [1, 2], [1, 2]]; let myMap = new Map(); let newArray = myArray.filter((val) => !myMap.has((typeof val + JSON.stringify(val))) && myMap.set(typeof val + JSON.stringify(val), 1)); console.log(JSON.stringify(newArray)); // [1,"2","value3",null,null,{"key":"value"},[1,2]] // 注释:JSON.stringify 把 NaN 转为了null所以出现了以上结果 // 实际结果是: [1, "2", "value3", null, NaN, {"key": "value"}, [1,2]] console.log(JSON.stringify(Array.from(myMap))); // [["number1",1],["string\"2\"",1],["string\"value3\"",1],["objectnull",1],["numbernull",1],["object{\"key\":\"value\"}",1],["object[1,2]",1]]
相关文章:
冴羽的博客: 《JavaScript专题之数组去重》
Set的唯一性通过Object.is方法判断。相关文档【Set】和【Object.is】