2014-04-22 70 views
0

我正在嘗試向對象數組中添加兩個屬性,因此我決定從原始對象數組中創建一個新對象數組,然後設置新屬性。 (我意識到這可能是更簡單的方法)Javascript - 對象數組中的未定義屬性

我的問題是,當我嘗試訪問新數組內的屬性時,它是未定義的。什麼是錯誤可能是明顯的,但對我來說不是。幫幫我!

var join = []; 
for (linksIndex = 0; linksIndex < links.length; ++linksIndex) { 
    join.push([{source:links[linksIndex].source,target:links[linksIndex].target, x1:0, y1:0, x2:0, y2:0}]); 
    }; 

for (joinIndex = 0; joinIndex < join.length; ++joinIndex) { 

// console.log("join in loop");console.log(join); // ok array of objects 
// console.log("join[joinIndex]");console.log(join[joinIndex]); // on object 
    console.log("join[joinIndex].source");console.log(join[joinIndex].source); // undefined why? 

    for (nodesIndex = 0; nodesIndex < nodes.length; ++nodesIndex) { 
     if (nodes[nodesIndex].name == join[joinIndex].source) { 
     join[joinIndex].x1=nodes[nodesIndex].x; // match source 
     join[joinIndex].y1=nodes[nodesIndex].y; // match source 
     }; 
    if (nodes[nodesIndex].name == join[joinIndex].target) { 
     join[joinIndex].x2=nodes[nodesIndex].x; // match target 
     join[joinIndex].y2=nodes[nodesIndex].y; // match target 
     } ; 
    } 
} 

回答

0

你正在推入一個對象的數組另一個數組!

因此,如果您將其更改爲:

join[joinIndex][0].source 

它會奏效。但我想這不是你想要的。因此,將join.push()更改爲:

join.push({ 
    source: links[linksIndex].source, 
    target: links[linksIndex].target, 
    x1: 0, 
    y1: 0, 
    x2: 0, 
    y2: 0 
}); 
1

更改此:

 join.push([{source:links[linksIndex].source,target:links[linksIndex].target, x1:0, y1:0, x2:0, y2:0}]); 

要:

 join.push({source:links[linksIndex].source,target:links[linksIndex].target, x1:0, y1:0, x2:0, y2:0}); 

或者使用console.log(join[joinIndex][0].source);//you need to access the array you made

0

你推包含對象數組到您join陣列。當您嘗試訪問陣列中的x1x2時,您會得到undefined,因爲該陣列只有0(這是您期望的對象)中的一個元素。

你需要做的:join.push({source:links[linksIndex].source,target:links[linksIndex].target, x1:0, y1:0, x2:0, y2:0})

這將是容易通過使用調試器來捕捉這個錯誤。我會在第二個循環中放置一個斷點,並且很容易看到join包含的內容。

相關問題