【发布时间】:2016-06-16 13:43:00
【问题描述】:
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' ] ]
*/
数组中有数组。第一个数组应该颠倒。我以为r[0].reverse() 会这样做,但这个 reverses all 数组。
有人能解释一下为什么会这样吗?
【问题讨论】:
-
效果未本地化为
reverse。你可以做r[0][3] = "d",它同样会一次改变“所有的数组”。它实际上只是一个数组。 -
对象是 JS 中的引用类型。您需要克隆数组。
标签: javascript arrays reverse