乐趣区

关于ecmascript:SetMap数据结构

Set 数据结构

ES6 提供了新的数据结构 Set。它相似于数组,然而成员的值都是惟一的,没有反复的值。

Set 自身是一个构造函数,用来生成 Set 数据结构。

const s = new Set()
s.add(1).add(2).add(1).add(3) // 增加,可链式调用,不反复
console.log(s); //Set {1,2,3}

Set 遍历对象

//set 对象遍历
s.forEach(i=>console.log(i))

for(let i of s)
{console.log(i);
}
console.log(s.size);  //set 对象长度
console.log(s.has(100)); //false
console.log(s.delete(2)); //true
console.log(s); //{1,3}
console.log(s.clear()); // 革除汇合内的全部内容 

利用场景

// 数组去重
const arr = [1,1,1,3,2,1,4,4]
const ss = new Set(arr)
const narr = Array.from(ss) // 转化成实在数组
console.log(ss,narr);
const result = [...ss]  // 转化成实在数组
console.log(result); 

Map 数据结构

相似于对象,实质上都是键值对汇合

原始的对象 key 无论什么类型都会被转化成字符串

Map 是严格意义上的键值对汇合,能够应用任意类型的键

Map 与对象的区别

简略的说,Object 类型就是增加计算属性,或者通过内部增加属性,他都会转化成 string,且 Object 的 key 只容许 string 或 symbol,而 map 很好解决了键的类型问题

传统的增加键值对

const obj = {name:"mcgee"}
obj[true] = "value"
obj[11] = "value"
obj[{a:1}] = "value"

console.log(Object.keys(obj)) //['11', 'name', 'true', '[object Object]' ]

任意类型的 Map 键值对

const m = new Map()
const str = {a:1};
m.set(str,"value") //key , value
m.set(11,"asd")
console.log(m);

操作方法

console.log(m.size)
console.log(m.get(str))
m.delete(11)
console.log(m);
m.clear()
console.log(m);

Map 也能够承受一个数组作为参数。该数组的成员是一个个示意键值对的数组

const map = new Map([['name', '张三'],
  ['title', 'Author']
]);

map.size // 2
map.has('name') // true
map.get('name') // "张三"
map.has('title') // true
map.get('title') // "Author"

下面理论执行的是

const items = [['name', '张三'],
  ['title', 'Author']
];

const map = new Map();

items.forEach(([key, value]) => map.set(key, value)
);

反对 iterator 接口可被 for..of..

退出移动版