从lodash fill和regular数组填充数组时出现不需要的结果

时间:2015-09-02 09:15:01

标签: javascript arrays multidimensional-array lodash fill

问题,_.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]

我做错了吗?我想创建并填充一组数组,其中4中的_.fill(Array(4), [])是动态的。

1 个答案:

答案 0 :(得分:1)

[]相当于JS中的new Array()

这意味着[[], [], [], []]是一个包含4个新数组的数组,_.fill(Array(4), [])是一个包含同一数组的四个副本的数组。

换句话说,_.fill变体等同于:

var a = [];
var test = [a, a, a, a];

如果你想制作一个多维数组,你可以这样做:

_.map(Array(n), function () { return []; })

创建一个二维数组。