开发者问题收集

数组未在 javascript 中作为参数传递。(TypeError:无法读取未定义的属性“length”)

2020-06-12
64

我有一个函数,它应该以 (n*n) 网格作为参数,并输出所有行中 4 个数字的最大乘积。(项目欧拉问题 11 的一部分)。当我尝试运行代码时,它给了我,

TypeError: Cannot read property 'length' of undefined

我在这里做错了什么?(我是初学者,所以如果我有任何愚蠢的错误,请告诉我。)

这是我的代码:

const grid = [
  [40, 17, 81, 18, 57],
  [74, 4, 36, 16, 29],
  [36, 42, 69, 73, 45],
  [51, 54, 69, 16, 92],
  [7, 97, 57, 32, 16]
];

function largestGridProduct(arr) {
  let product = 1 , maxProduct = 1;
  for(let i=0 ; i<arr.length ; i++){
    for(let j=0 ; j<arr.length-3 ; j++){
      product = grid[i][j] * grid[i][j+1] * grid[i][j+2] * grid[i][j+3];
      if(product > maxProduct){
        maxProduct = product;
      }
    }
  }
  return maxProduct;
}

console.log(largestGridProduct(grid));

那么我在这里做错了什么?

3个回答

您没有在函数中返回任何内容...

顺便说一句,您可以让它更简单。

参见此内容:

[
  [40, 17, 81, 18, 57],
  [74, 4, 36, 16, 29],
  [36, 42, 69, 73, 45],
  [51, 54, 69, 16, 92],
  [7, 97, 57, 32, 16]
 ].reduce((max, a2) => {
  const val = a2.reduce((a, b) => {
   return Math.max(a, b);
 });
 return Math.max(val, max); 
}, 0)

它使用箭头函数 (es6) 和数组归约。这将返回所有输入数组的最大值。

Christian
2020-06-12

这是一个愚蠢的错误,我在函数中使用了变量名“grid”而不是“arr”。 顺便说一句,谢谢大家。 好的。这是我的工作代码:-

const grid = [
  [40, 17, 81, 18, 57],
  [74, 4, 36, 16, 29],
  [36, 42, 69, 73, 45],
  [51, 54, 69, 16, 92],
  [7, 97, 57, 32, 16]
];

function largestGridProduct(arr) {
  let product = 1 , maxProduct = 1;
  for(let i=0 ; i<arr.length ; i++){
    for(let j=0 ; j<arr.length-3 ; j++){
      product = arr[i][j] * arr[i][j+1] * arr[i][j+2] * arr[i][j+3];
      if(product > maxProduct){
        maxProduct = product;
      }
    }
  }
  return maxProduct;
}

console.log(largestGridProduct(grid));
Rohan Nagmoti
2020-06-12

像这样工作:)

   if(product > maxProduct){
         return  product = maxProduct;
      }
      return  maxProduct;
    }
  }
}
Žygimantas Pusvaškis
2020-06-12