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()
九次,它似乎只调用一次,并使用Array
创建的对象的九个引用填充新emptyRow()
。当然,如果我更改任何子数组中的值,则会在所有子数组的相同索引处更改该值。
有没有办法为每个条目创建一个新对象?
答案 0 :(得分:2)
Array#fill
无法帮助您,它接受已创建的对象emptyRow()
返回的值。您可以使用接受函数的Array#map
,但您无法使用new Array()
构造函数。这是最简单的方法:
function emptyMatrix() {
Array.apply(null, {length: 9}).map(emptyRow);
// create the array fill in values
}
或者,更一般地说:
function generateArray(n, valueFactory) {
return Array.apply(null, {length: n}).map(valueFactory);
}
答案 1 :(得分:0)
function emptyMatrix(length) {
var matrix = new Array();
for (var i = 0; i < length; i++)
matrix[i] = new Array(length).fill(0)
return matrix
}
console.log(emptyMatrix(5))
您可以设置矩阵的长度
答案 2 :(得分:0)
map():
的其他解决方案
var line = new Array(9).fill(0);
var matrix = line.map(x => new Array(9).fill(0))
console.log(matrix);
&#13;
答案 3 :(得分:0)
答案 4 :(得分:0)