Set,Map数据结构

Posted mcgee0731

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Set,Map数据结构相关的知识,希望对你有一定的参考价值。

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..

以上是关于Set,Map数据结构的主要内容,如果未能解决你的问题,请参考以下文章

10.Set 和 Map 数据结构

ES6新特性:Set和Map

Set 和 Map 数据结构

数据结构哈希表--线性探测和哈希桶及unordered_set,unordered_map代码示范

数据结构哈希表--线性探测和哈希桶及unordered_set,unordered_map代码示范

ES6的新特性(12)——Set 和 Map 数据结构