JavaScript Map
和Set
个对象都是iterable objects。两者都按[key, value]
对存储对象。我想知道什么时候用什么?是否有一个优先于另一个?
答案 0 :(得分:43)
如果您正在讨论ES6类型,即使Set
可能使用Map
实现,它们也不是相同的数据结构。
您对Map
的定义是正确的,但Set
是唯一值的集合,与可能重复的数组不同。
var array = [1, 2, 3, 3];
var set = new Set(array); // Will have [1, 2, 3]
assert(set.size, 3);
var map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
map.set('C', 3);
map.set('a', 4); // Has: a, 4; b, 2; c: 3, C: 3
assert(map.size, 4);
答案 1 :(得分:12)
var obj = {};
obj.name= "Anand Deep Singh";
console.log(obj.name); //logs "Anand Deep Singh"
同样在 ES6 中,我们可以使用常规对象。
var map = new Map();
map.set("name","Anand Deep Singh");
console.log(map.get("name")); //logs "Anand Deep Singh"
但值得注意的是地图不是使用文字对象语法创建的,并且使用设置和获取存储和访问数据的方法。
它有 has 方法来检查对象中是否存在密钥,删除方法以删除对象和清除方法清除整个物体。
设置是唯一的值列表。这只是一个独特的清单。
var set = new Set(["a", "a","e", "b", "c", "b", "b", "b", "d"]);
console.log(set); //logs Set {"a", "e", "b", "c", "d"}
无法像数组一样访问集合,它提供与Map相同的方法。
答案 2 :(得分:2)
Set
Map
。您映射键到值Set
:有来自不同组织的人开会。有些人来自同一组织。我们需要组成所有不同组织的列表。为此,我们可以使用一个集合,因为我们只希望每个组织都包含一次:
const organization = new Set();
organization.add('org1');
organization.add('org2');
organization.add('org3');
organization.add('org1');
organization.add('org3');
organization.add('org1');
for(let org of organization){
console.log(org);
}
Map
:我们有一包狗,希望为每只狗指定年龄。我们想将每只狗的唯一名称映射到狗的年龄:
const dogs = new Map([['fluffy', 10], ['barkie', 13]]);
dogs.forEach((value, key) => console.log(key, value));
Map
与Object
有何不同?
Object
也是键值对的集合,通常可以实现与Map
罐(创建键值对)相同的目的。但是,Map
和Object
之间存在一些关键区别:
Map
内置于Iterable中,这使它可以使用for of
循环或其对普通JS forEach()
无法使用的Object
方法的实现。Map
在其prototype
上有一些不错的内置方法,这使得使用它非常好。由于Objects
的所有Object.prototype
继承者都可以使用更有用的方法。例如,size()
上的Map
方法返回Map
中的键数。答案 3 :(得分:0)
有两种主要的数据结构:
但这对现实生活来说还不够。这就是 Map 和 Set 也存在的原因。
例如:
let map = new Map();
map.set('1', 'str1'); // a string key
map.set(1, 'num1'); // a numeric key
map.set(true, 'bool1'); // a boolean key
let hamid = { name: "Hamid" };
// john is the key for the map
map.set(hamid, 123);
实例:
let set = new Set();
let hamid= { name: "Hamid" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
// visits, some users come multiple times
set.add(hamid);
set.add(pete);
set.add(mary);
set.add(hamid);
set.add(mary);
// set keeps only unique values
alert( set.size ); // 3