Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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_Javascript - Fatal编程技术网

水平循环二维数组-javascript

水平循环二维数组-javascript,javascript,Javascript,如何水平循环通过这个3x3数组网格并打印出1、4、7、2、5、8、3、6、9 编辑:除了在数组长度不等于其他数组的情况下使用同样有效的两个循环外,还有其他更有效的方法吗 设网格=[ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; 这里的代码是特定于数据的您需要使用嵌套for循环: for(var i = 0; i < grid.length; i++) { var arr = grid[i]; for(var j = 0; j < arr.le

如何水平循环通过这个3x3数组网格并打印出1、4、7、2、5、8、3、6、9

编辑:除了在数组长度不等于其他数组的情况下使用同样有效的两个循环外,还有其他更有效的方法吗

设网格=[ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
这里的代码是特定于数据的

您需要使用嵌套for循环:

for(var i = 0; i < grid.length; i++) {
    var arr = grid[i];
    for(var j = 0; j < arr.length; j++) {
        console.log("array[" + i + "][" + j + "] = " + arr[j]);
    }
}
因此,请看一下我的解决方案:

设网格=[ [1,2,3], [4,5,6], [7,8,9] ]; 对于设x=0;x<网格[0]。长度;x++{ 对于设y=0;y 设网格=[ [1, 2, 3], [4, 5, 6], [7, 8, 9], ]; forlet i=0;i<网格[0]。长度;我++{ forlet j=0;j} 如果数组的长度都相同,那么有很多答案是有效的。这里有一种处理可能不同长度数组的方法。它基本上一直运行,直到找不到更多数据:

设网格=[ [1, 2, 3, 4, 5], [4, 5, 6, 7], [7, 8, 9, 10, 11, 12] ]; 设电流=栅极,i=0 whilecurrent.length{ 电流=栅极.filterarr=>iconsole.logarr[i] 我++
} 您只需要找到内部数组和外部数组的大小

for(let i=0;i<countYourArraySize;i++)
{
for(let j=0;j<countYourInnerArayLength;j++)
{
console.log(grid[j][i])
}
}

如果使用map,只需一个显式循环即可:


您可以在单个循环中执行此操作。但是这个长度必须相同

let grid = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

for (var i = 0; i < grid.length*grid.length; i++) {
    var row = Math.floor(i / grid.length);
    var col = i % grid.length;
    console.log(grid[col][row]);
}

单个数组的长度是否都相同?是的,但我希望它足够智能,能够动态检查,如果您只想使用单个循环,请查看我的@总努比汉克斯。有比使用两个循环更好的方法吗?@totalnoob肯定有更好的方法,但你必须使用嵌套循环:-我已经发布了关于单循环的答案,你可以使用除法和除法提示来获取索引@这很好!谢谢与双循环解决方案相比,它的复杂性如何?复杂性应该是行数*最长数组的长度。这将与其他类似。但是,就元素总数而言,即使没有更多的元素,也会查看每个数组。即使索引未定义,也会检查较短的数组。第二,尽管@totalnoob,您可能可以通过只查看其中保留数据的元素来改进这一点。请参见编辑。这是一个非常酷的解决方案。与使用两个for循环相比,它的复杂性如何?地图本身就是一个循环,对吗?
let grid = [
 [1,2,3],
 [4,5,6],
 [7,8,9]
];
let result = [];
for (let i=0; i < grid.length; i++) {
    result = result.concat(grid.map((row) => row[i])));
}
console.log(result);
let grid = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

for (var i = 0; i < grid.length*grid.length; i++) {
    var row = Math.floor(i / grid.length);
    var col = i % grid.length;
    console.log(grid[col][row]);
}