[英]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.