2017-10-07 110 views
0

我一直在嘗試和嘗試不同的方式來思考這個盒子外面,出於某種原因我無法得到它。排序一個數組作爲參數

  function sortByLength(array) { 
 
      for(var i = 0; i < array.length; i++) { 
 
      for(var n = 0; n < array.length; n++) { 
 
       array.sort(function(i, n) { 
 
       return i.length - n.length; 
 
       }); 
 
      } 
 
      } 
 
      return array; 
 
     } 
 
      
 
     console.log(sortByLength(["Hello", "Cheese", "Bye"])); 
 
      
 
     //expecting ["Bye", "Hello", "Cheese"]

我想我想弄清楚:
1.爲什麼這是一個無限循環?
2.爲什麼我不能簡單地傳遞i和n的循環值,然後比較它們以便按長度對它們進行排序?

任何線索或幫助,我可以得到將不勝感激。謝謝!

+0

我跑了它在Chrome的JavaScript控制檯,它完美的罰款。這不是一個無限循環。 – hexicle

+0

我在codepen中運行它,它不會工作,因爲它被認爲是一個「無限循環」。它也不會作爲我的挑戰答案。 –

回答

0

你爲什麼要嘗試排序數組n^2次?這足以排序只是一次致電:

sortByLength = function (array){ 
array.sort(function(i, n){return i.length - n.length;}); 
return array; 
} 
sortByLength(["Hello", "Cheese", "Bye"]); 

(3) ["Bye", "Hello", "Cheese"] 
+0

和更直接的回答你的問題: 1)它不是一個無限循環。可能需要很長的時間 2)內部array.sort函數中的i和n不是相同的變量,它們在循環中。在排序他們是數組元素。在for循環中,它們是簡單的數字 –

+0

謝謝謝爾蓋。我不知道爲什麼它不會讓我接受它,因爲我認爲我把代碼放在沒有循環的地方。這些循環是通過試圖在盒子外「思考」出來的,因爲我的第一次嘗試不會奏效。再次感謝! –

1

你實際上並不需要for-loop的。循環變量的in與排序功能使用的參數in不同,因此您正在有效地對數組array.length進行排序的平方時間。

只要寫:

function sortByLength(array){ 
 
    array.sort(function(i, n){ 
 
     return i.length - n.length; 
 
     }); 
 
    return array; 
 
} 
 

 
console.log(sortByLength(["Hello", "Cheese", "Bye"]));

+0

謝謝。我不知道爲什麼它沒有爲我嘗試幾百次我嘗試過!本來可能是拼寫錯誤或丟失的分號或某物。 –