2011-04-21 49 views
0

這個問題,也許您輕鬆..但我是新的JavaScript我無法理解「之類的功能」

我無法理解這部分功能

kids.sort(函數(N,M )

什麼n和m ??,以及如何我可以理解這種功能

thsnks

<script> 
function sortkids(e) { 
    if (typeof e == "string") e = document.getElementById(e); 
    var kids = []; 
    for(var x = e.firstChild; x != null; x = x.nextSibling) 
     if (x.nodeType == 1) kids.push(x); 
    kids.sort(function(n, m) { 
        var s = n.firstChild.data; 
        var t = m.firstChild.data; 
        if (s < t) return -1;  
        else if (s > t) return 1; 
        else return 0;   
       }); 

    for(var i = 0; i < kids.length; i++) e.appendChild(kids[i]); 
} 
</script> 
<ul id="list"> 
<li>one<li>two<li>three<li>four <!-- items are not in alphabetical order --> 
</ul> 
<button onclick="sortkids('list')">Sort list</button> 
+0

您將「比較」函數傳遞給「排序」,該函數使用比較函數來比較任意兩項(以查看哪一項先來)。這是JavaScript中的一個非常基本的模式 - 您需要獲得一本關於JavaScript的好書並閱讀它。不要假設,如果你知道另一種編程語言,你可以通過反覆試驗來選擇JavaScript。 – 2011-04-21 06:34:00

+0

@Stephen Chung謝謝我有「javascript好的部分」,但它對初學者來說很難 – tito11 2011-04-21 06:46:36

+0

好吧,試試類似「JavaScript for Beginners」... – 2011-04-21 06:48:37

回答

3

.sort是進行實際的排序爲你,即項目周圍的洗牌在數組中。你需要告訴.sort如何你想要物品排序。您可以通過提供一個函數來獲取兩個參數,並返回兩個您認爲「較大」或「較小」或兩者相等(返回值爲-101)的信息。

.sort通過數組,每次傳遞兩個元素到你的函數中,詢問「哪一個更大?」,根據答案對數組進行排序。它會重複這個操作直到數組被排序。

+0

很好的詳細解釋... – 2011-04-21 06:37:11

+0

謝謝..告訴我一本書或一篇關於功能的文章 – tito11 2011-04-21 06:55:23

+0

@tarek永遠不要讀一本,所以不能建議。 *任何Javascript書應該討論的功能;如果不是,它不是一本關於Javascript的書。或者爲此編程。 :P – deceze 2011-04-21 07:16:26

1

nm將是數組中的元素。該函數將被重複調用,並使用不同的數組元素進行比較,並且預計會返回一個值,表示n是否小於,大於或等於m。這讓sort完成了對數組進行排序的工作,儘管sort對這些元素沒有任何瞭解。所有它需要知道,從你在傳遞函數獲取。

什麼代碼正在做的是把DOM數組中的元素,然後分類整理,只將元素的數組中,排序不是在DOM。所以最後一點,做e.appendChild調用,正在採用排序後的數組並移動DOM中的元素,使它們位於正確的位置。 (它的工作原理,因爲當你調用appendChild與已經在其他地方的DOM元素,它就會被感動;以及appendChild總是在最後追加)