2016-03-04 31 views
0

在Google chrome中對數組進行排序時,我無法理解下面提到的行爲。這似乎不一致。我在Internet Explorer和Mozilla Firefox上也嘗試過,看起來效果很好。任何人都可以幫助我理解並解決問題。未知/谷歌瀏覽器中數組的排序行爲不一致

編輯: 要求是根據標準對對象列表進行排序。該對象列表綁定到UI上的List視圖。對於列表中的任何兩個對象,排序條件可以相同。當對象相等,並且在列表上應用排序時,列表順序的行爲不一致。下面是重現此行爲的一段代碼。

--Creating the array 
x=[{Name:'h1', value: 1},{Name:'h2', value: 1},{Name:'h3', value: 1},{Name:'h4', value: 1},{Name:'h5', value: 1},{Name:'h6', value: 1},{Name:'h7', value: 1},{Name:'h8', value: 1},{Name:'h9', value: 1},{Name:'h10', value: 1},{Name:'h11', value: 1},{Name:'h12', value: 1},{Name:'h13', value: 1}] 

--Sort the array 
x.sort(function (a, b) {a = a.value;b = b.value;if (a < b)return -1;if (a > b) return 1; return 0;})  
--Results in order, 
--h7, h1, h3, h4, h5, h6, h2, h8, h9, h10, h11, h12, h13 

--Sort the array again 
x.sort(function (a, b) {a = a.value;b = b.value;if (a < b)return -1;if (a > b) return 1; return 0;}) 
--Results in order, 
--h2, h7, h3, h4, h5, h6, h1, h8, h9, h10, h11, h12, h13 
+1

你有一個對象數組,所以你需要實現你自己的排序算法。 'sort()'被設計用於基類型(字符串,int等) –

+0

我試圖使用x.sort(函數(a,b){return 0;}),定義如何比較對象。我仍然得到相同的結果? – neo

+0

你試圖達到什麼樣的順序? –

回答

0

從排序比較中返回0意味着對象是'相同的'。返回-1或1來告訴排序功能如何處理它。

由於您不是對字符串或數字的數組進行排序,而是對象,因此您需要告訴分揀機哪些屬性用於排序。

.sort(function (a, b){ 
    if (a.Name < b.Name) { 
    return -1; 
    }; 
    if (a.Name > b.Name) { 
    return 1; 
    }; 
    // Return 0, or decide to compare on something else. 
    return 0; 
}); 

由於比較字符串的方式,這將導致'h1,h10,h11,...'。如果你要像一個號碼,H1,H2,H3排序,你需要在比較之前做一些額外的工作:

var result = x.sort(function (a, b){ 
    var anumber = parseInt(a.Name.substring(1)); 
    var bnumber = parseInt(b.Name.substring(1)); 
    if (anumber < bnumber) { 
    return -1; 
    }; 
    if (anumber > bnumber) { 
    return 1; 
    }; 
    // Return 0, or decide to compare on something else. 
    return 0; 
}); 

這導致在陣列中進行排序「H1,H2,H3。 ..'。有更多的方法可以做到這一點,但這是一個。

+0

我編輯了這個問題,請看看。我正在尋找原因,爲什麼當項目值比較相等時的不一致行爲? – neo