2012-01-22 84 views
2

我已經梳理了網絡,試圖讓我對以下方面的一些理解,因爲它涉及到下面的對象。 「a」和「b」是什麼意思?它爲什麼重要?自定義排序功能如何爲多維數組工作

students.sort(function(a, b){ 
    return a.fn-b.ln 
}) 

var students = [{ 
    fn : "Stone", 
    ln : "Carpenter", 
    scores : [61,99,73,68,80,62,176,78] 
}, 
{ 
    fn : "Samson", 
    ln : "Sears", 
    scores : [68,193,91,190,95,65,171,75] 
}, 
{ 
    fn : "Quin", 
    ln : "Morton", 
    scores : [79,95,161,92,182,163,198,182] 
}, 
{ 
    fn : "Qunitessa", 
    ln : "Hardy", 
    scores : [99,65,75,69,77,67,86,78] 
}, 
{ 
    fn : "Ashley", 
    ln : "England", 
    scores : [147,70,81,64,148,71,70,63] 
}, 
{ 
    fn : "Thaddeus", 
    ln : "Hutchinson", 
    scores : [99,190,188,185,160,88,89,76] 
}, 
{ 
    fn : "Yeo", 
    ln : "Hayes", 
    scores : [88,64,199,165,198,76,74,81] 
}, 
{ 
    fn : "Rylee", 
    ln : "Larson", 
    scores : [71,126,63,71,168,173,175,88] 
} 
]; 

據我所知,匿名函數將返回1,0,1的值,但什麼是自變量的意義ab,因爲我不會傳遞任何值(如employees.sort(a.something, b.something))時我稱之爲功能。有了上述數據,我需要通過點擊我的表格的其中一個標題進行排序 - 這將涉及到排序字符串和數字值。有關如何對「分數」數組中的嵌套值進行排序的任何想法?我將如何去排序通過名字/姓氏?

+0

請參閱https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort。 「a」和「b」是指某種可分類對的元素。排序算法對數組中的每個項目使用此規則。 –

回答

0

該數組的sort方法將採用您的排序功能,並在必要時應用它來比較兩個元素並確定它們的排序順序。 ab將是您正在排序的數組的兩個元素。

要將對象按字母順序按姓氏排序,你會需要像這樣的一個排序功能:

取出.toLowerCase()如果你希望你的排序是區分大小寫。要排序的東西,如「姓氏,名字」你可以使用以下行來代替:

var sortFieldA = (a.ln + ", " + a.fn).toLowerCase(); 
    var sortFieldB = (b.ln + ", " + b.fn).toLowerCase(); 

要還你的數據的得分進行排序,你需要在你的每一個數據項進行排序設置:

for (var i = 0; i < students.length; i++) { 
    var student = students[i]; 
    student.scores.sort(); 
} 

請注意,您不需要在這種情況下顯式排序功能,因爲sort將默認使用數字排序順序。

+0

你真棒,但是如果我沒有傳遞元素作爲參數,函數在哪裏獲取元素來確定它們的排序順序?還是我? – jjhenry

+0

您正在調用Array的'sort'方法,'students.sort(...)',並將它傳遞給排序函數。然後Array的'sort'方法接受你的函數並在必要時將它應用到它的元素。 –

+0

非常感謝。我正在做的是創建一個動態TABLE,我需要通過表頭進行排序的能力。我在排序嵌套數組中的數據時遇到困難。我想通過嵌套的第一個值,嵌套的第二個值等排序數組...任何想法? 得分:[99,190,188,185,160,88,89,76] 99將是第一列,190將是第二列等等... – jjhenry

0

.sort需要回撥。然後它會從數組中選擇兩個元素並將它們傳遞給回調函數。回調函數返回哪個元素更大。 .sort根據該信息重新排列陣列中的兩個元素。然後它接受另外兩個元素並將它們傳遞給回調函數。沖洗,重複,直到陣列排序。

ab只是「an element」和「another element」的變量。給他們打電話,只要你喜歡命名沒有意義。