Javascript 有人能给我解释一下为什么这个循环不';你不能给我想要的结果吗?

Javascript 有人能给我解释一下为什么这个循环不';你不能给我想要的结果吗?,javascript,arrays,Javascript,Arrays,基本上,我正在编写一个小算法,它接收一个只有数字的随机数组,并吐出数组中第二高的数字(假设数组中的所有条目都是数字,并且至少有两个条目)。代码如下: var secondGreatest = function(numberArray){ var array = numberArray; var result = []; for(var i = 0; i < array.length; i++){ if(array[i] === Math.max.apply(M

基本上,我正在编写一个小算法,它接收一个只有数字的随机数组,并吐出数组中第二高的数字(假设数组中的所有条目都是数字,并且至少有两个条目)。代码如下:

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];

};
var secondgrest=函数(numberArray){
var数组=numberArray;
var结果=[];
对于(var i=0;i
所以我要做的是将数字的输入数组设置为变量“array”。然后我将变量“result”设置为空数组

在for循环中,我指定如果第I个位置的数组等于数组的最大数,则将该数推入空数组,并从原始数组中删除该数。因为“result”数组的顺序是从最高到最低的数字,所以我调用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));

您实际上不需要进行迭代,而实际上,只要删除max项,迭代就有必要重置for。不过,Tushar在评论中的回答更简洁,可能更有意义。

如果您想继续使用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));

您实际上不需要进行迭代,而实际上,只要删除max项,迭代就有必要重置for。不过,Tushar在评论中的回答更简洁,可能更有意义。

当您进行拼接时,数组将被重新索引,缓存的array.length将过时。这就是for循环停止的原因。您可以从末尾开始并向后迭代以修复此问题。

执行拼接时,阵列将被重新索引,而缓存的array.length将被废弃。这就是for循环停止的原因。您可以从末尾开始并向后迭代以解决此问题。

您正在迭代数组,同时使用splice对其进行更改。这是在要求一些恶劣的行为。为什么不
arr.sort(函数(a,b){return b-a;})如果最大的数字恰好是数组中的最后一个数字,则这是If条件为真的唯一时间。如果你不想使用内置的数组排序机制,你必须阅读排序算法并实现一个有效的算法(尽管,仅仅为了找到第二个最高的数字而对整个数组进行排序似乎是浪费的;只需循环一次并用两个变量跟踪最高和第二个最高的数字就会简单得多。)您正在迭代一个数组,同时使用splice对其进行更改。这是在要求一些恶劣的行为。为什么不
arr.sort(函数(a,b){return b-a;})如果最大的数字恰好是数组中的最后一个数字,则这是If条件为真的唯一时间。如果你不想使用内置的数组排序机制,你必须阅读排序算法并实现一个有效的算法(尽管,仅仅为了找到第二个最高的数字而对整个数组进行排序似乎是浪费的;只需循环一次并用两个变量跟踪最高和第二个最高的数字就会简单得多。)