簡體   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