javascript Map对象与Set对象

时间:2014-06-06 15:37:32

标签: javascript

JavaScript MapSet个对象都是iterable objects。两者都按[key, value]对存储对象。我想知道什么时候用什么?是否有一个优先于另一个?

4 个答案:

答案 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)

开发人员通常只在需要地图时使用常规JavaScript对象。

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));

MapObject有何不同?

Object也是键值对的集合,通常可以实现与Map罐(创建键值对)相同的目的。但是,MapObject之间存在一些关键区别:

  • Map内置于Iterable中,这使它可以使用for of循环或其对普通JS forEach()无法使用的Object方法的实现。
  • Map在其prototype上有一些不错的内置方法,这使得使用它非常好。由于Objects的所有Object.prototype继承者都可以使用更有用的方法。例如,size()上的Map方法返回Map中的键数。

答案 3 :(得分:0)

有两种主要的数据结构:

  • 对象: 用于存储键控集合。
  • 数组: 用于存储有序集合。

但这对现实生活来说还不够。这就是 Map 和 Set 也存在的原因。

  • 地图: 是键控数据项的集合,就像对象一样。但主要区别在于 Map 允许任何类型的键。

例如:

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
 

https://javascript.info/map-set