繁体   English   中英

JavaScript 映射对象不保存对象键?

[英]JavaScript map object not saving object keys?

所以我试图向地图对象添加一个条目,键是一个对象,但它似乎不起作用。

let myMap = new Map();
myMap.set({type : 'sum', val : 10},1);
console.log(myMap.get({type:'sum',val:10})); <---- this returns undefined

为什么它返回 undefined 而不是 1?

原因是对象是对 JavaScript 中值的引用。 因此,即使具有相同值的两个对象也被评估为不同的,因为它存储为两个不同的值。 如果你使用相同的,你会得到你期望的结果:

let myMap = new Map();
const key = {type : 'sum', val : 10}
myMap.set(key, 1);
console.log(myMap.get(key)); // 1

javascriot 使用 SameValueZero 算法在您设置和从此结构获取时保存密钥。 SameValueZero 类似于严格相等 (===)。 因为在 get 方法中,您正在创建新对象并将其作为键传递给该方法,因此该键并不严格等于您在设置时使用的对象,因此您将获得空值。

它应该只接受键值对,所以你提供对象代替键。

 myMap.set({type : 'sum', val : 10},1);
 myMap.set( {key:1, val: {type : 'sum', val : 10}} );

尝试使用一个键并将对象 { type:'',val:''} 添加到它作为它的值。 尝试将 '1' 包装到对象本身中

因为您将需要一个密钥来访问它。

参考:[ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map][1]

它将返回myMap.size

即使用作键的两个对象看起来相等(因为它们具有相同的属性),它们也不是(根据===或多或少使用的操作 - 请参阅此处了解更多详细信息)。

如果您执行以下操作,它将起作用:

let myMap = new Map();
var obj = {type : 'sum', val : 10};
myMap.set(obj,1);
console.log(myMap.get(obj));

Map 是一个键值对,你用它的键存储一个值。 喜欢:

let map = new Map();
         // key     // value
map.set('myKey','just a text');

然后要访问该值,在这种情况下您需要密钥“myKey”

map.get('myKey'); // will return just a text

如果您希望将对象转换为地图,请按照这篇文章进行操作

let obj = {
  name: "John",
  age: 30
};

let map = new Map(Object.entries(obj));

alert( map.get('name') ); // John

您使用 2 个不同的对象,它们恰好具有相同的属性。 但是,它们并不相等。 要使其工作,您必须使用完全相同的对象,如下所示:

let myMap = new Map();
var obj = {type : 'sum', val : 10};
myMap.set(obj,1);
console.log(myMap.get(obj));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM