问题,_.fill(Array(4), [])
是否等于[[], [], [], []]
?
因为_.isEqual(_.fill(Array(4), []), [[], [], [], []])
是true
var test = [[], [], [], []];
test[0].push(1);
console.log(test[0]);
test[1].push(2);
console.log(test[1]);
test[2].push(3);
console.log(test[2]);
test[3].push(4);
console.log(test[3]);
返回[1]
[2]
[3]
[4]
是我想要的,但是
var test = _.fill(Array(4), []);
test[0].push(1);
console.log(test[0]);
test[1].push(2);
console.log(test[1]);
test[2].push(3);
console.log(test[2]);
test[3].push(4);
console.log(test[3]);
返回[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
我做错了吗?我想创建并填充一个数组的数组,其中_.fill(Array(4), [])
中的4
是动态的。
[]
在JS中相当于new Array()
。
这意味着[[], [], [], []]
是一个包含4个新数组的数组,而_.fill(Array(4), [])
是一个包含相同数组的4个副本的数组。
换句话说,_.fill
变体相当于:
var a = [];
var test = [a, a, a, a];
如果你想创建一个多维数组,你可以这样做:
_.map(Array(n), function () { return []; })
创建一个二维数组