从lodash填充与常规数组填充数组时产生的不希望的结果



问题,_.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 []; })

创建一个二维数组

相关内容

  • 没有找到相关文章

最新更新