javascript - 返回数组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]。
解决方案
这段代码有一点问题(实际上,不仅如此,而且这是返回错误结果的最糟糕的部分)。请检查我在里面的评论。
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])
}
祝你好运!
推荐阅读
- docker - Dotnet 核心 Web Api 3.1 部署到 docker 失败
- machine-learning - 模型架构和训练参数是什么意思?
- django - 使用 postgreSQL 在 Django 中设置外键关系
- r - 如何在 Rstudio 中将序数变量转换为虚拟变量?
- python - 将特定列从浮点数转换为十进制
- c - 多线程 - RunQ 随机变化
- linux - Nginx 为目录中的文件返回 404,服务器根参数是正确的
- c++ - 在堆栈方面使用 atoi 的问题,已保存编号 318 而不是 3
- java - JavaFX setPrefSize 不改变 vBox 大小
- c# - 如何让 Visual Studio IDE 消息显示?