数组链接方法显示为未定义

时间:2017-12-19 08:41:28

标签: javascript arrays method-chaining

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

4 个答案:

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