基本上,我正在编写一个小算法,它接受一个仅包含数字的随机数组,并吐出数组中第二大的数字(假设数组中的所有条目都是数字,并且至少有 2 个条目)。这是代码:
var secondGreatest = function(numberArray){
var array = numberArray;
var result = [];
for(var i = 0; i < array.length; i++){
if(array[i] === Math.max.apply(Math, array)){
result.push(array[i]);
array.splice(i, 1);
}
};
return result[1];
};
所以我正在做的是将输入数字数组设置为变量“array”。然后我将变量“结果”设置为空数组。
在 for 循环中,我指定如果第 i 个位置的数组等于数组的最高数字,则将该数字插入空数组并从原始数组中删除该数字。由于“结果”数组的顺序是从最高到最低的数字,因此我调用 result[1] 来给出第二高的数字。
但是,结果数组仅包含一个条目,并且它是前一个数组的最大编号。之后,for循环似乎停止了。我尝试了“继续”;声明,但没有任何效果。
任何关于为什么这不起作用的帮助都是值得赞赏的。
最佳答案
如果您想继续使用 Math.max 方法,这里有一个较短的代码。
var secondGreatest = function(numberArray){
var top1 = Math.max.apply(Math, numberArray);
numberArray.splice(numberArray.indexOf(top1));
return Math.max.apply(Math, numberArray);
};
var arr = [1,3,5,7,4,2];
alert(secondGreatest(arr));
您实际上并不需要迭代,并且实际上迭代将使得每当您删除最大项目时都需要重置 for 。不过,Tushar 在评论中的回答更简洁,而且可能更有意义。
关于javascript - 有人可以向我解释为什么这个循环没有给我想要的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33046207/