如何在JavaScript中镜像一个多维数组?

6

我需要能够镜像一个大小会变化的多维数组。目前我正在为每个特定的数组大小进行硬编码,这非常低效。

例子:

Arr1 { 1 2 3               Arr2 { 1 2
       4 5 6                      3 4
       7 8 9 }                    5 6 }

镜像:

     { 3 2 1                    { 2 1
       6 5 4                      4 3
       9 8 7 }                    6 5 }

数组的大小范围从2x5到4x10不等。


你在第二个数组上使用了什么逻辑? - Joe
你是想修改原始数组吗,比如说 Arr1 之前是 [ [1,2,3], [4,5,6], [7,8,9] ],现在要变成 [ [3,2,1], [6,5,4], [9,8,7] ]?还是你想创建一个数组的副本,就像 Arr1[ [1,2,3], [4,5,6], [7,8,9] ],所以你需要 mirrored_Arr 变成 [ [3,2,1], [6,5,4], [9,8,7] ] - ruakh
2个回答

4

好的,所需工具只是一面横向镜子。 我假设您的数组每行都包含一个数组, 因此您只需要反转每一行。

for(var i=0;i<multiarr.length;i++){
   multiarr[i].reverse();
}

甚至更好
multiarr.map(function(arr){return arr.reverse();});

在写完第一个答案后,我想到了这一点。很多人在编辑数组时用循环过于复杂化了他们的代码,而实际上他们可以使用map()函数。 - bigblind
1
你的 map 的例子有点误导人,因为它并没有明显表明回调函数是被用于其副作用。 (特别是 return 这个语句,增加了代码可读性的难度)。有时候这是无法避免的,但在这种情况下,我认为 multiarr.forEach(function(arr) { arr.reverse(); }) 会更清晰易懂。 - ruakh
foreach的浏览器支持情况如何?当我需要它时,我总是使用jQuery的等效方法$.each。 - bigblind
我知道我想太多了。谢谢! - J. Celestino

0
For each of the lines:
    For i = 0 to width/2:
        arr[line][i] <-> arr[line][width - i]

那不应该可以工作吗?


它确实应该,但是JS有一个内置的reverse()函数。 - bigblind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接