Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3 js:从平面数组创建嵌套数组(矩阵)_Javascript_D3.js_Matrix - Fatal编程技术网

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以便为我工作。瞧,我用小提琴得到了与上面相同的输出;(你在小提琴中得到了什么输出?你能把它贴在你的答案中吗?矩阵似乎在任何一个循环中都没有得到任何修改来为我工作。瞧,我在小提琴中得到了与上面相同的输出;(你在小提琴中得到了什么输出?你能把它贴在你的答案中吗?矩阵似乎在两个循环中都没有被修改过。)