首页 > 解决方案 > 返回数组javascript中的两个最高数字

问题描述

编写一个名为 twoHighest 的函数,它将一个数字数组作为其参数,并返回数组中最大的两个数字。

返回值应为以下格式的数组:[secondHighest,highest]

传入的数字顺序可以是任意顺序。

不要使用 sort() 方法中的构建 - 测试将失败!

function twoHighest(arr) {
  var highest = 0;
  var secondHighest = 0;

  for (i = 0; i < arr.length; i++) {
    if (arr[i] > highest) {
      highest = arr[i];
    }
  }
  for (i = 0; i < arr.length; i++) {
    if (arr[i] > secondHighest && arr[i] < highest) {
      secondHighest = arr[i];
    }
  }
  return [secondHighest, highest];
}

console.log(twoHighest([1, 2, 10, 8])); // [8, 10]
console.log(twoHighest([6, 1, 9, 10, 4])); // [9,10]
console.log(twoHighest([4, 25, 3, 20, 19, 5])); // [20,25]
console.log(twoHighest([1, 2, 2])); // [2, 2];

这一直有效,直到最后一个数组 [1, 2, 2,]。它返回 [1, 2] 而不是 [2, 2]。

标签: javascript

解决方案


这段代码有一点问题(实际上,不仅如此,而且这是返回错误结果的最糟糕的部分)。请检查我在里面的评论。

for (i = 0; i < arr.length; i++) {
  if (arr[i] > highest) { // the >= operator must be here
    highest = arr[i]; //you just throw out previous highest, instead of moving it to the second place. Now it is your number 2 
  }
}

因此,如果您发现该值大于或等于当前最高值,则应将前最高值移至第二高位置。

另外,不需要使用 for() 两次。只需使用“else if”条件。结果将是这样的:

function twoHighest(arr) {
  var highest = 0;
  var secondHighest = 0;

  for (var i = 0; i < arr.length; i++) { // I added i declaration since I did not find where it was declared
    if (arr[i] >= highest) { // >= in here, an explanation is above
      secondHighest = highest; // firstly, move the ex-highest to the second place
      highest = arr[i];
    } else if (arr[i] > secondHighest && arr[i] < highest) {
      secondHighest = arr[i];
    }
  }

  return [secondHighest, highest];
}

最后,我想让你看看我的函数版本,可能你会发现它有用:

function twoHighest(arr) {
  return arr.reduce((acc, rec) => {
    return rec > acc[1] ? [acc[1], rec] : rec > acc[0] ? [rec, acc[1]] : acc
  },[0,0])
}

祝你好运!


推荐阅读