ES6(Set,WeakSet,Map,WeakMap数据结构)

2019-03-22  本文已影响0人  陈裔松的技术博客

Set类型

数据特点:是一种集合,与数组类似,集合中的元素不能重复
// 声明Set类型的数据
let list1 = new Set([1, 2, 3, 4, 5]);
console.log(list1);       // Set(5) {1, 2, 3, 4, 5}
console.log(list1.size);  // 5
使用场景:常用于去重
// 常用于去重
let list2 = new Set([1, 2, 2, 3, 4]);
console.log(list2);   // Set(4) {1, 2, 3, 4}

// 严格来说,2与'2'是不一致的,所以这里的结果与原先一致
let list3 = new Set([1, 2, '2', 3, 4]);
console.log(list3);   // Set(5) {1, 2, "2", 3, 4}
常用方法1:add(),has(),delete(),clear()
let list = new Set(['html', 'css']);

list.add('js');
list.add('js');                 // 这个操作是无效的
console.log(list);              // Set(3) {"html", "css", "js"}

console.log(list.has('html'));  // true

list.delete('html');
console.log(list);              // let list = new Set();

list.clear();
console.log(list);              // Set(0) {}
常用方法2:keys(),values(),entries()
let list = new Set(['html', 'css', 'js']);

for (let key of list.keys()) {
    console.log(key);
    // html
    // css
    // js
}

for (let value of list.values()) {
    console.log(value);
    // html
    // css
    // js
}

for (let [key, value] of list.entries()) {
    console.log(key, value);
    // html html
    // css css
    // js js
}

WeakSet类型

let weakList = new WeakSet();

weakList.add({});
// weakList.add(2);     // 报错

console.log(weakList);  // WeakSet {{…}}

Map类型

数据特点:是一种集合,与对象类似,key可以是任意数据类型(比如数组,对象等)
声明方式:
let map = new Map([
    ['a', 123],
    ['b', 456]
]);
console.log(map);           // Map(2) {"a" => 123, "b" => 456}
console.log(map.size);      // 2
常用方法1:get(),set(),has(),delete(),clear()
console.log(map.get('a'));  // 123

map.set('c',789);
console.log(map);           // Map(3) {"a" => 123, "b" => 456, "c" => 789}

console.log(map.has('a'));  // true

map.delete('a');
console.log(map);           // Map(1) {"b" => 456}

map.clear();
console.log(map);           // Map(0) {}
常用方法2:keys(),values(),entries()

与Set类似,省略...

WeakMap

WeakMap与Map的区别,和Set与WeakSet的区别是一样,省略..

横向对比:Set,Map,Array,Object

let map = new Map();
let set = new Set();
let array = [];
let obj = {};

let setItem = {t: 1};

// 增
map.set("t", 1);        // Map(1) {"t" => 1}
set.add(setItem);       // Set(1) [{t: 1}]
array.push({t: 1});     // [{t: 1}]
obj['t'] = 1;           // {t: 1}

// 查
map.has("t");                  // true
set.has(setItem);              // true
array.some(item => item.t);    // true
't' in obj;                    // true

// 改
map.set("t",2);                                     // Map(1) {"t" => 2}
item.t = 2;                                         // Set(1) [{t: 2}]
array.forEach(item => item.t ? item.t = 2 : null);  // Map(1) {"t" => 2}
obj['t'] = 2;                                       // {t: 1}

// 删
map.delete("t");                                    // Map(0) {}
set.delete(setItem);                                // Set(0) {}
const index = array.findIndex(item => item.t);
array.splice(index,1);                              // []
delete obj["t"];                                    // {}
上一篇 下一篇

猜你喜欢

热点阅读