javascript - 有人可以向我解释为什么这个循环没有给我想要的结果吗?

标签 javascript arrays

基本上,我正在编写一个小算法,它接受一个仅包含数字的随机数组,并吐出数组中第二大的数字(假设数组中的所有条目都是数字,并且至少有 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/

相关文章:

arrays - 查找定界符并打印第二个数组

arrays - ElasticSearch中的权限

javascript - 当我在 Firebase 中使用 set() 时发生的事件顺序是什么?

javascript - 为什么这个 axios put 请求没有正确设置 header

javascript - Phonegap,停止音频

javascript - 分隔字符串数组以创建表格行

java - 将 byte[] 更改为输入流?

javascript - 样式切换器的下拉菜单

javascript - 如何将 nightwatch.js 与 WebStorm 集成

Java:将 double 组添加到列表中