2014-04-22 52 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包含的内容。

相关问题