我有一个这样的数组:
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]
];
这不是我想要的。有人有好的建议吗?谢谢:)
答案 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