2013-06-22 69 views
1

當試圖使用對象作爲關鍵字加載散列時,會出現意想不到的行爲;即稍後檢索我的數據時,散列總是指使用的最後一個鍵。我希望這是由於關閉的行爲,但是,我認爲我做了什麼是必要的,以防止這一點:如何在循環中使用對象作爲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來阻止它。

回答

0

延長@Matt Ball answer

您可以使用JSON.stringify字符串對象。

var a = {}; 
a.b = 1; 

JSON.stringify(a); 
// '{"b": 1}' 

注:不能字符串化圓形物體:

var a = {}; 
a.a = a; 

JSON.stringify(a); 
// TypeError: Converting circular structure to JSON 
相關問題