在尝试了这个示例之后,对地图的基础知识感到困惑,并在JavaScript中设置



我正在尝试应用一些示例,以更好地了解地图和集合的差异以及每个示例的行为似乎令人困惑。查看示例和下面的输出

地图示例:

let nameMap = new Map([
  ['name', 'stack'],
  ['name', 'overflow'],
  ['domain', 'technology']
]);
// iterate over keys (nameMap)
for (let name of nameMap) {
  console.log(JSON.stringify(name)); 
}

输出:

["name","overflow"]
["domain","technology"]

设置示例:

let nameSet = new Set([
  ['name', 'stack'],
  ['name', 'overflow'],
  ['domain', 'technology']
]);
// iterate over keys (nameSet)
for (let name of nameSet) {
  console.log(JSON.stringify(name));
}

输出:

["name","stack"]
["name","overflow"]
["domain","technology"]
  1. 我的问题是,为什么地图仅返回两个类似对象的第二次发生?
  2. 集合即使前两个键和值相同,也返回所有三个对象,而它应该删除其中一个。

我的问题是为什么地图仅返回两个类似对象的第二次出现?

因为地图包含一组键值对。您每个键只能有一个值。在构造函数中,每个数组代表[key, value](。键'name'的第二位数据覆盖第一个。

设置即使前两个键和值相同,也返回所有三个对象,而它应该删除其中一个。

A集存储一组唯一值。每个数组(如['name', 'stack'](是一个值。

,因为 Set s就像数组一样 - 它们只是将值存储在列表中。因此,构造函数将把所有三个数组添加到新集合中的值。Map构造函数与Object.fromEntries相似 - 每个子阵列中的第一项是键,第二个是值。您不能将键存储在集合中,只有值 - 因此,这两个项目必须完全相同,并且必须从集合中排除。

a Map是键值对的容器。在您的输入中,namedomain将成为钥匙。由于键只能存在一次,因此键name被重复进行。

a Set是一个值的数组,可重复重复值本身。由于您的输入中没有任何相同的值,因此全部保留。

最新更新