数组链接方法显示为未定义[重复]

问题描述 投票:0回答:4

这个问题在这里已有答案:

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方法数组定义工作正常?

javascript arrays method-chaining
4个回答
4
投票

但是方案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); 
});

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的对象。


0
投票

您希望生成填充为0的9个数组的数组,并将其返回到变量。

您可以使用map方法实现此目的。

const array = 
  new Array(9)
      .fill([])
      .map(function(){
        return Array(9).fill(0);
       });     
       
console.log(array);   

附:在您的情况下,传递给map方法参数不需要值,索引等


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将是另一种选择,但我不投票,因为它在内存中创建了另一个数组。

© www.soinside.com 2019 - 2024. All rights reserved.