簡體   English   中英

有人可以向我解釋為什么這個循環不能給我想要的結果嗎?

[英]Can someone explain to me why this loop doesn't give me the desired result?

基本上,我正在寫一個小算法,該算法采用僅包含數字的隨機數組,並吐出該數組中第二高的數字(假設數組中的所有條目都是數字,並且至少有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];

};

因此,我正在做的是將數字輸入數組設置為變量“數組”。 然后,將變量“結果”設置為一個空數組。

在for循環中,我指定如果第ith個位置的數組等於該數組的最高編號,則將該編號推入空數組並將該編號從原始數組中刪除。 由於“結果”數組將具有從最高到最低的順序,因此我調用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在評論中的答案雖然更緊湊,但可能更有意義。

進行拼接時,將對數組重新索引,並且緩存的array.length變得過時。 這就是為什么for循環停止的原因。 您可以從頭開始,然后向后迭代以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM