javascript - 尝试这个例子后,对 Javascript 中的 Maps 和 Set 的基础知识感到困惑

标签 javascript arrays ecmascript-6 set javascript-objects

我试图应用一些示例来更好地理解 Map 和 Set 的区别,并且每个示例的行为似乎令人困惑。查看下面的示例和输出

map 示例:

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. 我的问题是为什么 map 仅返回两个相似对象的第二次出现?
  2. Set 返回所有三个对象,即使前两个键和值相同,但它应该删除其中一个。

最佳答案

My question is why map returns only the second occurence of two similar objects?

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

Set returns all three objects even though first two keys and values being same, while it supposed to delete one of them.

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

关于javascript - 尝试这个例子后,对 Javascript 中的 Maps 和 Set 的基础知识感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56804980/

相关文章:

javascript - JS : Most optimized way to remove a filename from a path in a string?

java - 如何根据列值Java将一个2D数组拆分为多个2D数组?

ios - 过滤 JSON 数据并打印

javascript - vue.js 将数据从父单文件组件传递给子组件

javascript - 如何在 reactjs 中验证表单

javascript - JavaScript 中 const 关键字的用法

javascript - 在 html5 Canvas 中用鼠标旋转图像

javascript - 单击添加按钮时自动日期

c# - keyup 事件调用数据库函数并填充列表框

javascript - Javascript 中对象创建的异常行为