我有一个对象数组节点
,其中每个组件对象都有.id
属性,我想创建一个方矩阵
这是一个由 [id][id]
索引的嵌套数组,表示逐个节点的交互:
nodes.forEach(function(node, i) {
matrix[node.id] = nodes.forEach(
function(node1, j) {
console.log(i,j);
return {
"x": j,
"y": i,
"z": 0
};
});
console.log(i, matrix[node.id]);
});
在控制台中我得到:
...
149 1
...
149 148
149 149
149 undefined
为什么表达式matrix[node.id] = ...
中没有分配对象?为什么没有错误或警告?我该如何修复它?
更新:根据 @pilotcam 的解释,forEach
不返回值,我尝试了以下操作:
var matrix = [];
var testnodes = [{id: "aaa", a:10},
{id: "aab", a:20},
{id: "aac", a:30},
{id: "aba", a:40}]
testnodes.forEach(function(node, i) {
matrix[node.id] = [];
// [{x: 1, y:2, z:0}, {x:2,y:3,z:0}];
testnodes.forEach(
function(node1, j) {
matrix[node.id][node1.id] = {
x: j,
y: i,
z: 0
};
console.log(i,j, node.id, node1.id, matrix[node.id][node1.id]);
});
console.log(i, matrix[node.id]);
});
我的矩阵
仍然没有填充到内部循环中:
...
3 1 aba aab Object { x: 1, y: 3, z: 0 }
3 2 aba aac Object { x: 2, y: 3, z: 0 }
3 3 aba aba Object { x: 3, y: 3, z: 0 }
3 Array [ ]
最佳答案
javascript forEach
方法不返回值。你可能想做
matrix[node.id] = [];
...并在第二个 forEach
中对其进行操作。从提出的问题来看,我猜您想要这样的东西:
nodes.forEach(function(node, i) {
matrix[node.id] = [];
nodes.forEach(
function(node1, j) {
console.log(i,j);
matrix[node.id][node1.id] = {
"x": j,
"y": i,
"z": 0
};
});
console.log(i, matrix[node.id]);
});
我修改了 fiddle 以循环遍历您的哈希表并表明它可能正在执行您想要的操作。 https://jsfiddle.net/rtxbzove/
关于javascript - d3.js : creating a nested array (matrix) from a flat array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43855845/