2017-08-04 26 views
-1

在下面的代碼片段中,最後一個控制檯日誌顯示(節點值)空字典,你能讓我知道原因嗎?爲什麼從java腳本函數返回空字典

node = {}; 
list1=[1,2,3]; 
for(each in list1){ 
    console.log(node); 
    var abc = function(t1, key){ 
     t1[key] = {}; 
     return t1; 
    } 
    node=abc(node, list1[each])[list1[each]] 
} 
console.log(node) 
+1

什麼是預期的輸出?我無法真正看到你想要完成什麼...... – zelitomas

+0

我在期待{1:{2:3}}。如果list1是[1,2,3,4],那麼我會期待{1:{2:{3:4}}} –

回答

1

這是因爲你在每次循環覆蓋節點變量。儘量讓備份參考:

node = {}; 
 
nodebackup = node; 
 
list1=[1,2,3]; 
 
for(each in list1){ 
 
    console.log(nodebackup); 
 
    var abc = function(t1, key){ 
 
     t1[key] = {}; 
 
     return t1; 
 
    } 
 
    node=abc(node, list1[each])[list1[each]] 
 
} 
 
console.log(nodebackup)

1

因爲你list1[each]這基本上是1 ... 3的新特性,它是一個對象來創建。該對象被分配給節點。

var abc = function(t1, key) { 
 
    t1[key] = {}; 
 
    return t1; 
 
} 
 

 
var node = {}, 
 
    list1 = [1, 2, 3], 
 
    each; 
 

 
for (each in list1) { 
 
    console.log(node); 
 
    console.log(abc(node, list1[each])[list1[each]]); 
 
    console.log(list1[each]); 
 
    node = abc(node, list1[each])[list1[each]]; 
 
} 
 

 
console.log(node);

獲取對象與想要的屬性,你可以使用另一個變量和移動給定對象內的新對象。

var abc = function(t1, key) { 
 
    t1[key] = {}; 
 
    console.log(t1); 
 
    return t1[key]; // return new object 
 
} 
 

 
var node = {}, 
 
    temp = node, 
 
    list1 = [1, 2, 3], 
 
    each; 
 

 
for (each in list1) { 
 
    temp = abc(temp, list1[each]); // assign just the new object 
 
} 
 

 
console.log(node);

+0

您能否告訴我在返回之前t1會有什麼? –