【发布时间】:2017-04-05 00:52:29
【问题描述】:
ES6 允许我们用某个值填充Array:
function emptyRow() {
return new Array(9).fill(0);
}
此函数返回一个长度为 9 的 Array,仅填充零:
>> emptyRow()
<< Array [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
现在我想生成一个Array,其中填充了其中的九个空行。
function emptyMatrix() {
return new Array(9).fill(emptyRow());
}
然而,fill 不是调用了九次emptyRow(),而是似乎调用了一次,并用对emptyRow() 创建的对象的九个引用填充了新的Array。自然,如果我更改任何这些子数组中的值,则该值会在所有子数组的相同索引处更改。
有没有办法为每个条目创建一个新对象?
【问题讨论】:
-
使用
[...Array(9)].map(emptyRow) -
您使用单个数组作为
fill的值,这意味着它将用相同的数组填充数组九次,并且数组是对象,这意味着它们通过引用值传递,所以基本上你会得到九次相同的数组。 -
谢谢@Guedes,这正是我所需要的。
-
马达拉的回答比我的更可取(因为兼容性),无论如何我很高兴它有帮助:)
标签: javascript arrays ecmascript-6