jQuery - 如何反转数组格式?

时间:2017-06-27 03:05:43

标签: jquery arrays reverse

我有一个这样的数组:

var test = [
             [1,1,1],
             [0,1,1],
             [0,0,0],
             [0,0,0]
           ];

我想知道如何从底部这样:

var test = [
             [0,0,0,1],
             [0,0,1,1],
             [0,0,1,1]
           ];

我试过这个例子

var ReverseArray = [];
var length = test.length;
for(var i = length-1;i>=0;i--){
   ReverseArray.push(test[i]);
}

但我得到了这个:

[
  [0,0,0],
  [0,0,0],
  [0,1,1],
  [1,1,1]
];

这不是我想要的。有人有好的建议吗?谢谢:)

2 个答案:

答案 0 :(得分:3)

您显示的代码实际上反转输入,但您想要的输出是旋转,而不是反转。

以下是使用一行代码执行此操作的一种方法:



var test = [
             [1,1,1],
             [0,1,1],
             [0,0,0],
             [0,0,0]
           ];

var output = test[0].map((_,i) => test.map(a => a[i]).reverse());

console.log(output);




或者没有arrow functions的情况(如果您正在使用IE),格式化的方式可能会让您更容易理解:

var output = test[0].map(function(_,i) {
  return test.map(function(a) { return a[i] }).reverse();
});

假设外部数组至少有一个条目,并且所有内部数组的长度都相同。

(编辑)请注意,使用普通循环会更有效率,因为您可以向后循环而不必调用.reverse()

答案 1 :(得分:1)

不幸的是,我不认为旋转矩阵有任何漂亮的javascript技巧,但下面仍然是一个非常干净的方法:

let cols = [], reversed = test.reverse();
for(let i = 0; i < reversed[0].length; i++)
    cols.push(reversed.map(row=> row[i]));

cols应该是所需配置中的矩阵。 demo