【问题标题】:Finding largest number in each sub-array of a 2D array? Javascript在二维数组的每个子数组中查找最大数? Javascript
【发布时间】:2021-09-07 07:35:17
【问题描述】:

我正在尝试返回每个子数组中的最大数字 - 但这是返回每个子数组的前两个值。看起来很简单,但我找不到哪里出错了。

function largestOfFour (arr) {
  let maxVal = 0
  let newArr = []
  for (i = 0; i < arr.length; i++) {
    for (j = 0; j < arr[i].length; j++) {
      if (arr[i][j] > maxVal) {
        maxVal = arr[i][j]
        newArr.push(maxVal)
      }
    }
  }
  return newArr
}

console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]))

此代码返回以下内容:[ 4, 5, 13, 27, 32, 35, 37, 39, 1000, 1001 ]。我哪里错了?我不想使用 .sort()

【问题讨论】:

  • i 变为 1 时,maxVal 的值是多少? 应该是什么?
  • 另外,您什么时候将maxVal 添加到newArr 中?什么时候应该将数组中的最大值保存到结果中?
  • @ScottHunter 应该加 1 吗?我想我已经想通了....

标签: javascript arrays for-loop


【解决方案1】:

问题是,只要找到新的最大值,就推送一个新值,而不是从当前集合中删除先前推送的值,您需要将 maxVal 存储到内部循环结束并推送该值之后,因此您只需为每个数组推送一个值,这实际上是最大的一个

您的函数应该类似于:

function largestOfFour (arr) {
  let maxVal = 0;
  let newArr = [];

  for (i = 0; i < arr.length; i++) {
    // reset maxVal, for new set of numbers
    maxVal = 0;
    for (j = 0; j < arr[i].length; j++) {
      if (arr[i][j] > maxVal) {
        // new largest number found
        maxVal = arr[i][j];
      }
    }
    // push highest number found in set
    newArr.push(maxVal);
  }
  return newArr
}

【讨论】:

    【解决方案2】:

    我不知道这是否允许,但它会给你结果:

    const arr=[[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]
    
    console.log(arr.map(a=>Math.max(...a)))

    【讨论】:

      【解决方案3】:

      我更喜欢@CarstenMassmann 的回答;但是,只是为了让您了解您的代码是如何出错的,但非常接近,请参阅对原始尝试的此编辑。

      如果找到临时最大值,则内部条件不会找到子数组的最大值。不要推送到条件内的结果,完成子数组的迭代,然后推送最佳临时最大值...

      function largestOfFour (arr) {
        let maxVal = 0
        let newArr = []
        for (i = 0; i < arr.length; i++) {
          for (j = 0; j < arr[i].length; j++) {
            if (arr[i][j] > maxVal) {
              maxVal = arr[i][j]
              // don't push here. maxVal is just the max *for now*
            }
          }
          newArr.push(maxVal) // push here
        }
        return newArr
      }
      
      console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]))

      【讨论】:

        猜你喜欢
        • 2017-04-03
        • 1970-01-01
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 2015-04-06
        • 1970-01-01
        相关资源
        最近更新 更多