数组未在javascript中作为参数传递。(TypeError:无法读取未定义的属性';长度')

数组未在javascript中作为参数传递。(TypeError:无法读取未定义的属性';长度'),javascript,arrays,typeerror,Javascript,Arrays,Typeerror,我有一个函数,它应该以(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

我有一个函数,它应该以(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]
];
功能最大网格产品(arr){
设乘积=1,maxProduct=1;

对于(设i=0;i函数中没有返回任何内容

顺便说一下,你可以让它更容易

见此:

[
  [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)和数组reduce。这将返回所有输入数组的最大值。

函数中没有返回任何内容

顺便说一下,你可以让它更容易

见此:

[
  [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)

它使用了arrow函数(es6)和array reduce。这将返回所有输入数组的最大值。

在函数中使用变量名“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));
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]
];
功能最大网格产品(arr){
设乘积=1,maxProduct=1;

对于(设i=0;i在函数中使用变量名“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));
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]
];
功能最大网格产品(arr){
设乘积=1,maxProduct=1;
对于(让i=0;i像这样工作:)

像这样工作:)


您的代码按原样工作(无错误)。我为您制作了一个片段,它不会抛出任何错误,正如您所看到的,您的代码按原样工作(无错误)。我为您制作了一个片段,它不会抛出任何错误,正如您所看到的,即使它是一个问题,它也不会真正解决OP的主要问题,即
TypeError
(虽然没有抛出,但这是另一件事)很好,现在答案更有价值;)即使这是一个问题,它也没有真正解决OP的主要问题,这是一个
类型错误(没有抛出,但这是另一件事)很好,现在答案更有价值;)Thx.但是我已经得到了答案。返回语句在原始代码中,我只是忘了在问题中添加它。Thx.但是我已经得到了答案。返回语句在原始代码中,我只是忘了在问题中添加它。