2012-06-04 69 views
0

我有一個JSON對象jobj = JSON.parse(jsnstr)由JSON.parse返回的數組,我希望按它的名稱對它進行排序。 我用JavaScript中的JSON對象排序

jobj=$(jobj).sort(sortfunction); 
function sortfunction(a,b){ 
    return a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1; 
}; 

但這沒有工作了,而不是我正在OBJ任何幫助越來越不確定?

+3

你在哪裏? – thecodeparadox

+0

您的代碼看起來很健全,我們需要您的JSON字符串進一步調查。 –

+1

你能告訴我們'jsnstr'看起來像什麼嗎? –

回答

0

我想你的意思是這樣寫:

jobj=$(jobj).sort(function(a,b){ 
    return a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1; 
}); 
0

你不需要jQuery的這一點。另外,sort修改了原始數組。所以,如果jobj是一個數組,你可以這樣做:

jobj.sort(sortfunction); 

您可能還需要考慮的情況下a.nameb.name是相同的:

function sortfunction(a,b){ 
    var aSort = a.name.toLowerCase(), 
     bSort = b.name.toLowerCase(); 
    if(aSort === bSort) return 0; 
    return aSort > bSort ? 1 : -1; 
} 

DEMO:http://jsfiddle.net/xmmPL/

3

您無法對散列進行排序;它必須是一個數組。你可以做的是將每個a.name值的引用設置爲一個數組,然後使用自定義函數對該數組進行排序,就像你在那裏。

json = JSON.parse(...); 
var refs = []; 
for(var i in json) { 
    var name = i.name; 
    refs.push({ 
    name : name.toLowerCase(), 
    object : i 
    }); 
} 

var sorted = refs.sort(function(a,b) { 
    return a.name > b.name; 
}); 

現在你的refs數組中的所有東西都被排序了,你可以通過排序[index] .object單獨訪問每個對象。

+0

+1表示「你無法排序哈希」。其他答案似乎假設它是一個數組。沒有看到json代碼,這是一個無償的假設。 – Martijn

+0

謝謝你,先生:) – matsko

+0

當我看着對象時,我沒有工作顯然。對象是一個散列一些數字不是必需的,但先前對象是對象。但感謝告訴我「我不能排序哈希」的事實:) – Vivalavista