Javascript d3 js:从平面数组创建嵌套数组(矩阵)
我有一个对象数组Javascript d3 js:从平面数组创建嵌套数组(矩阵),javascript,d3.js,matrix,Javascript,D3.js,Matrix,我有一个对象数组节点,其中每个组件对象都有.id属性,我想创建一个正方形矩阵,它是一个嵌套数组,由[id][id]索引,表示节点间的交互: nodes.forEach(function(node, i) { matrix[node.id] = nodes.forEach( function(node1, j) { console.log(i,j); return { "x": j,
节点
,其中每个组件对象都有.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
为什么在表达式矩阵[node.id]=…
中未指定对象?为什么没有错误或警告?我怎样才能修好它
Upd:follow@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以循环遍历您的哈希表,并显示它可能正在做您想要的事情 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以循环遍历您的哈希表,并显示它可能正在做您想要的事情 问题是我试图用非整数值索引数组。正确的方法似乎是使用“对象”/哈希表:
var matrix = {};
var testnodes = [{id: "aaa", a:10},
{id: "aab", a:20},
{id: "aac", a:30},
{id: "aba", a:40}]
// with simple for loops:
for (var i = 0, len = testnodes.length; i < len; i++) {
matrix[testnodes[i].id] = {};
for (var j = 0, len = testnodes.length; j < len; j++) {
matrix[testnodes[i].id][testnodes[j].id] = {
x: j,
y: i,
z: 0
};
}
console.log( "matrix:", matrix[testnodes[i].id] );
}
console.log( "matrix:", matrix);
问题是我试图用非整数值索引数组。正确的方法似乎是使用“对象”/哈希表:
var matrix = {};
var testnodes = [{id: "aaa", a:10},
{id: "aab", a:20},
{id: "aac", a:30},
{id: "aba", a:40}]
// with simple for loops:
for (var i = 0, len = testnodes.length; i < len; i++) {
matrix[testnodes[i].id] = {};
for (var j = 0, len = testnodes.length; j < len; j++) {
matrix[testnodes[i].id][testnodes[j].id] = {
x: j,
y: i,
z: 0
};
}
console.log( "matrix:", matrix[testnodes[i].id] );
}
console.log( "matrix:", matrix);
非常感谢。这是有道理的,但仍然不起作用,见更新谢谢!这是有道理的,但它仍然不起作用,请参阅updateSeems以便为我工作。瞧,我用小提琴得到了与上面相同的输出;(你在小提琴中得到了什么输出?你能把它贴在你的答案中吗?矩阵似乎在任何一个循环中都没有得到任何修改来为我工作。瞧,我在小提琴中得到了与上面相同的输出;(你在小提琴中得到了什么输出?你能把它贴在你的答案中吗?矩阵似乎在两个循环中都没有被修改过。)