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方法数组定义工作正常?
答案 0 :(得分:4)
但是方案1的问题是什么,其中包含forEach方法 数组定义工作正常。
问题是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);
});
答案 1 :(得分:1)
由于其他答案已经提到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。
答案 2 :(得分:0)
您希望生成9个填充0的数组,并将其返回给变量。
您可以使用map
方法实现此目的。
const array =
new Array(9)
.fill([])
.map(function(){
return Array(9).fill(0);
});
console.log(array);
P.S。没有值,索引等需要传递给你的案例中的map方法参数
答案 3 :(得分:0)
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
是另一种选择,但我不投票,因为它在内存中创建了另一个数组。