2015-04-14 38 views
3

我有2個JS數組,我遍歷他們兩個找到相似的。JavaScript對象沒有得到正確的成員值

anomalies.forEach(function(anomaly) { 

    links.forEach(function(link) { 
     if ((link.source.name === anomaly.source) && (link.target.name === anomaly.target)) { 
      console.log("anomaly"); 
      link.type = "anomaly"; 
      console.log(link); 
     } else { 
      link.type = "normal"; 
     } 

    }); 

}); 

console.log(links); 

在的link.type值應"anomaly"的情況下,其仍體現爲"normal"log from chrome

爲什麼是這樣,應該做什麼?

+0

無法重現 - > http://jsfiddle.net/z39d8z1z/ – adeneo

+0

數組內容是什麼樣的?沒有看到,很難說你的代碼是否正確。 – Pointy

回答

0

外貌,就像每個不改變初始值,嘗試:

n = anomalies.length; 
k = links.length; 
for(i=0; i<n; i++){ 
    for(j=0; j<k; j++){ 
     if ((links[j].source.name === anomalies[i].source) && (links[j].target.name === anomalies[i].target)) { 
     console.log("anomaly"); 
     links[j].type = "anomaly"; 
     console.log(links[j]); 
     } else { 
     links[j].type = "normal"; 
     } 
    } 
} 
console.log(links); 
2

我是一個算法錯誤。在提供的屏幕截圖中type="normal"是對象的當前值。

考慮:

Loop1 
Loop2 
    condition 

如果內部loop2滿足條件的鏈接對象,然後它的類型值被分配"anomaly"。但是當loop1的下一次迭代發生時,並且相同鏈接對象的條件不滿足時,則該值將被分配爲"normal"。因此它是一個算法錯誤。

+0

屏幕截圖怎麼樣,它在頭部是_anomaly_,但是它在體內是_normal_? – Regent

+0

@Regent:標題顯示調用console.log()時的值。而身體是對象的當前狀態。 – vishalaksh

+0

有趣的時刻,謝謝。 – Regent

0

如果你看看文檔: here

你可以看到,有3個參數,可以傳遞給回調函數 - 元素 - 指數 - 陣列

如果你打電話FOREACH這樣的:

var x=[1,2,3,4,6]; 
x.forEach(function(e){ 
    if(e==3)f=9; 
    console.log(e); 
}) 
console.log(x); 

[1,2,3,4,6]

數組元素的值將不改變,因爲要更改緩衝器值。

但是如果使用的forEach這樣的:

var x=[1,2,3,4,6]; 
x.forEach(function(e,i,a){ 
    if(e==3)a[i]=9; 
    console.log(a[i]); 
}) 
console.log(x); 

[1,2,9,4,6]

你看到數組中的值已更改。