當試圖使用對象作爲關鍵字加載散列時,會出現意想不到的行爲;即稍後檢索我的數據時,散列總是指使用的最後一個鍵。我希望這是由於關閉的行爲,但是,我認爲我做了什麼是必要的,以防止這一點:如何在循環中使用對象作爲JavaScript中的鍵加載哈希?
var hash = {};
var arry = [];
var list = [{val:"a"},{val:"b"},{val:"c"}];
var len = list.length;
dump("load : \n");
for (var i=0;i<len;i++) {
let pos = i;
let obj = list[pos];
hash[obj] = obj.val;
arry.push(obj);
dump(" "+obj.val+" "+hash[obj]+"\n");
}
dump("retrieve : \n");
for (var i=0;i<len;i++) {
let pos = i;
let obj = list[pos];
dump(" "+obj.val+" "+arry[pos].val+" "+hash[obj]+"\n");
}
輸出爲:
load :
a a
b b
c c
retrieve :
a a c
b b c
c c c
我特意去了試圖通過使用let提高迭代對象的範圍來防止這種情況,但我仍然顯然錯過了某些東西。我想了解背後的原因,以及如何使用Javascript來阻止它。
非常感謝你。 – Allasso