反转数组中的数组会反转数组中的所有数组

Sun*_*Sun 1 javascript arrays reverse

var alph = ["a", "b", "c"];
var r = [];

for(var i = 0; i < 5; i += 1) {
    r.push(alph);
}

r[0].reverse();
console.log(r); 

/* Output

[ [ 'c', 'b', 'a' ],
  [ 'c', 'b', 'a' ],
  [ 'c', 'b', 'a' ],
  [ 'c', 'b', 'a' ],
  [ 'c', 'b', 'a' ] ]

*/

/* Expected output

[ [ 'c', 'b', 'a' ],
  [ 'a', 'b', 'c' ],
  [ 'a', 'b', 'c' ],
  [ 'a', 'b', 'c' ],
  [ 'a', 'b', 'c' ] ] 

*/
Run Code Online (Sandbox Code Playgroud)

数组中有数组.第一个数组应该颠倒过来.我以为r[0].reverse()会这样做,但是这会反转 所有数组.

有人可以解释为什么会这样吗?

Pra*_*lan 7

你正在推动数组的引用,所以更新一个将对其余的进行更改,因为它们都是指单个数组.而是推送原始数组的副本以复制数组使用Array#slice方法.

var alph = ["a", "b", "c"];
var r = [];

for (var i = 0; i < 5; i += 1) {
  // push the exact copy of original array
  r.push(alph.slice());
}

r[0].reverse();
console.log(r);
Run Code Online (Sandbox Code Playgroud)