当试图使用对象作为关键字加载散列时,会出现意想不到的行为;即稍后检索我的数据时,散列总是指使用的最后一个键。我希望这是由于关闭的行为,但是,我认为我做了什么是必要的,以防止这一点:如何在循环中使用对象作为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