基本上,我正在编写一个算法,它接收一个只有数字的随机数组,并吐出数组中第二高的数字(假设数组中的所有条目都是数字,并且至少有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”。然后我将变量“result”设置为空数组。
在for循环中,我指定如果第i个位置的数组等于数组的最大数,则将该数字推入空数组并从原始数组中删除该数字。由于“result”数组的编号从最高到最低,我调用result [1]给出第二高的数字。
但是,结果数组只包含一个条目,它是前一个数组的最大数字。之后,for循环似乎停止了。我试过“继续”;声明,但没有任何作用。
对于为什么不起作用的任何帮助表示赞赏。
答案 0 :(得分:0)
如果您想继续使用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在评论中的回答虽然更紧凑,但可能更有意义。
答案 1 :(得分:0)
当你进行拼接时,数组正在被重新索引,并且缓存的array.length已经过时了。这就是for循环停止的原因。您可以从最后开始并向后迭代以解决此问题。