我正在尝试向对象数组添加两个属性,因此我决定从原始对象创建一个新的对象数组,然后设置新属性。 (我意识到这可能有更简单的方法。)
我的问题是,当我尝试访问新数组中的属性时,它是未定义的。有什么不对可能是显而易见的,但不是我。救命啊!
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 :(得分: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
数组中。当您尝试访问数组中的x1
或x2
时,您将获得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
});