map和set

226 阅读2分钟

Map和Set

set


//Set 我个人认为Set是多用来操作数组的
var array=[1,2,3,3,2,1];
//数组去重
var set=new Set(array);
console.log(set);  //{1,2,3}
//获取长度
set.size()  //3
//添加元素
set.add(4);//添加已有元素会将原来的元素覆盖,长度不变
console.log(set) //{1,2,3,4}
//删除元素
set.delete(4);
console.log(set) //{1,2,3}
//将map转换为数组对象
set=Array.from(set);
console.log(set);//[1,2,3]
//获取数组中最大值
var max=Math.max(...set);
console.log(max);//3

map


//Map
var map=new Map();
map.set("a",1);
map.set("a",3);//对一个key重复赋值时,会进行覆盖,取最近的赋值 a=3;
map.set("b",4);
console.log(map);//{a:3,b:4}
//删除元素
map.delete("a");
console.log(map)//{b:4}

set应用场景

Set和Array的区别是Set里的每一个元素都是唯一的,比如你有一个Array里面有4个元素[1, 2, 3, 1],如果你把它转换成Set,就变成[1, 2, 3]了。所以我们可以利用Set的这个特性做整数数组的去重。但要注意的是,如果你的数组是[{name: 1}, {name: 1}]这样的包含Object的数组,那么你把它转换为Set时并不能去重,因为虽然这两个对象看起来一样,但在Set看来,这个数组里的两个对象是两个完全不同的值,所以并不符合去重的要求。

map应用场景

Map和Object很类似,但Map有一个比较特殊的应用场景。如果你在开发时不确定键值对里面的键的名称,那么你需要用Map。举例来说,你需要动态地从MongoDB里获取键值并显示给用户,但也许你并不关心这些键值的键名到底是什么,那么在这种情况下,你可以用Map,例如这样:

var myMap = new Map();

var keyObj = {},
    keyFunc = function () { return 'hey'},
    keyString = "a string";

myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");

console.log(myMap.get(keyFunc));

仅用于个人整理,参考:

JS中set和map的使用场景

js中的map和set