【问题标题】:Array is not being passed as argument in javascript.(TypeError:cannot read property 'length' of undefined)数组未在 javascript 中作为参数传递。(类型错误:无法读取未定义的属性“长度”)
【发布时间】:2020-10-02 04:53:37
【问题描述】:

我有一个函数应该将 (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));

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

【问题讨论】:

  • 您的代码按原样工作(没有错误)。
  • 我为你做了一个 sn-p,它不会抛出任何错误,如你所见

标签: javascript arrays typeerror


【解决方案1】:

像这样工作:)

   if(product > maxProduct){
         return  product = maxProduct;
      }
      return  maxProduct;
    }
  }
}

【讨论】:

  • 谢谢。但我已经得到了答案。 return 语句在原始代码中,我只是忘了添加它。
【解决方案2】:

我在函数中使用变量名“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));

【讨论】:

    【解决方案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) 和数组归约。这将返回所有输入数组的最大值。

    【讨论】:

    • 即使是 an 问题,它也不能真正解决 OP 的主要问题,即TypeError(没有抛出,但这是另一回事)
    • 很好,现在答案更有价值了 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2013-11-24
    相关资源
    最近更新 更多