这个问题在这里已有答案:
const array = new Array(9).fill([]).forEach(function(value, index, arr) {
arr[index] = Array(9).fill(0);
console.log(index, arr[index]); // This line report properly by creating
}); // new array.
console.log(array); // Reported as underdefined.
但是,如果重新定义如下,它按预期工作。
const array = new Array(9).fill([]);
array.forEach( function(value,index,arr){
arr[index] = Array(9).fill(0);
console.log(index,arr[index]);
});
console.log(array);
我想在一行中定义多维数组作为此状态命令。
但是方案1的问题是什么,有限的forEach方法数组定义工作正常?
但是方案1的问题是什么,其中有限的方法数组定义工作正常。
问题是forEach返回undefined
我想在一行中定义多维数组,用作this.state命令。
您可以使用map
var output = new Array(9).fill([]).map( function(value,index,arr){
return Array(9).fill(0); //return the inner array
});
或者@bergi建议,你也可以使用Array.from
var output = Array.from(Array(9)).map( function(value,index,arr){
return Array(9).fill(0);
});
由于其他答案已经提到Array.forEach
返回undefined
或不返回任何东西,你不能使用它。
作为替代方法,您可以使用Array.from
。
以下是一个示例:
var output = Array.from({
length: 9
}, () => {
return Array.from({
length: 9
}, () => 0)
});
console.log(output)
此外,您的代码还有一个问题是,您在Array.fill
中使用了一个对象。 array.fill的作用是,它将首先创建要填充的值,然后将其填入所有项目中。
var output = new Array(9).fill([]);
output[0].push(1);
console.log(output)
在检查输出时,它显示/ ** ref:2 ** /,但如果您在控制台中检查,您会注意到所有项目都有1
项目。所以你应该避免使用Array.fill的对象。
您希望生成填充为0的9个数组的数组,并将其返回到变量。
您可以使用map
方法实现此目的。
const array =
new Array(9)
.fill([])
.map(function(){
return Array(9).fill(0);
});
console.log(array);
附:在您的情况下,传递给map方法参数不需要值,索引等
Array.prototype.forEach
返回undefined
。只需拨打下面的forEach
即可。
const array = new Array(9).fill([])
array.forEach( function(value,index,arr){
arr[index] = Array(9).fill(0);
});
// [
// [0, 0, 0, ...],
// ...
// ]
使用map
将是另一种选择,但我不投票,因为它在内存中创建了另一个数组。