Javascript - 对象数组中的未定义属性

时间:2014-04-22 14:37:53

标签: javascript arrays object

我正在尝试向对象数组添加两个属性,因此我决定从原始对象创建一个新的对象数组,然后设置新属性。 (我意识到这可能有更简单的方法。)

我的问题是,当我尝试访问新数组中的属性时,它是未定义的。有什么不对可能是显而易见的,但不是我。救命啊!

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
        } ;   
   }
 }

3 个答案:

答案 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

答案 1 :(得分:0)

您正在将包含对象的数组推送到join数组中。当您尝试访问数组中的x1x2时,您将获得undefined,因为该数组在0只有一个元素(这是您的对象)期待)。

您需要执行:join.push({source:links[linksIndex].source,target:links[linksIndex].target, x1:0, y1:0, x2:0, y2:0})

使用调试器很容易捕获此错误。我会在第二个循环上放置一个断点,很容易看出join包含的确切内容。

答案 2 :(得分: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
});