2012-07-31 50 views
4

如何用first_name對這個JSON對象進行排序?用jQuery對JSON進行排序

{ 
    1 :{user_id:1, first_name:"first_name1", last_name:"lastname1", email:"[email protected]"}, 
    7 :{user_id:7, first_name:"user2", last_name:"test2", email:""}, 
    72 :{user_id:72, first_name:"testing343", last_name:"", email:""}, 
    246:{user_id:246, first_name:"aaa", last_name:"ssss", email:""} 
} 
+1

對象屬性沒有排序,所以你不能排序它們。 – Musa 2012-07-31 00:24:28

+0

@Musa:當然可以。不是直接的,但你當然可以對鍵名進行排序並按順序進行操作。 – jAndy 2012-07-31 00:26:57

+0

檢查我的答案。 – 2012-07-31 00:53:10

回答

3

首先,你JSON字符串是無效的。清楚起來,首先,你被迫eval()字符串在它的當前形式,JSON.parse()將無法​​正常工作。


對象鍵是按規格無序的。您不能靜態「排序」鍵名並將其凍結在對象中。但是你當然可以對鍵名進行排序,並按照它們的值按順序進行操作。

例如:

var json = '{1:{user_id:1, first_name:"first_name1", last_name:"lastname1", email:"[email protected]"}, 7:{user_id:7, first_name:"user2", last_name:"test2", email:""}, 72:{user_id:72, first_name:"testing343", last_name:"", email:""}, 246:{user_id:246, first_name:"aaa", last_name:"ssss", email:""}}'; 

json = eval(json); 

Object.keys(json).sort(function(a,b) { 
    return json[a].first_name.localeCompare(json[b].first_name); 
}).forEach(function(key) { 
    console.log(json[key].first_name); 
}); 

該代碼假定的ES5的庫存狀況啓用JS引擎或任何種類ES5-墊片庫。

+0

腳本正在排序並正確顯示用戶。有沒有辦法將它們永久分類?我的意思是覆蓋以前的JSON? – 2012-07-31 00:56:57

+0

@JSnewbie:不,不是。當然,你可以創建一個醜陋而笨拙的'json string',但這根本不會對你有所幫助。第二個將'eval'或'parse'放入一個ECMAscript對象中,鍵名又是隨機的。您唯一的選擇就是將其「實時」排序,然後按照時間順序對關鍵字/值進行操作。 – jAndy 2012-07-31 00:58:49

+0

完美!得到它的工作!謝謝 – 2012-07-31 01:11:00

0

爲什麼要排序對象?

您將要將此對象循環到數組中,然後對數組進行排序。 http://jsfiddle.net/z2xsC/例如:

所有的
//loop into array 
var arr = []; 
for(var key in data){ 
    if(data.hasOwnProperty(key)){ 
    arr.push(data[key]); 
    } 
} 

//now, sort your array 
arr.sort(function(a,b) { 
    var nameA=a.first_name.toLowerCase(), 
     nameB=b.first_name.toLowerCase(); 

    if (nameA < nameB){ 
    return -1; 
    } else if (nameA > nameB){ 
    return 1 
    } else { 
    return 0 
    } 
}); 
+0

排序算法看起來過於複雜,'String.prototype .localeCompare'將完成這項工作。 – jAndy 2012-07-31 00:54:51

+0

啊好點! – 2012-07-31 01:00:11

1

寫您的JSON對象類似如下:

data = [{user_id:1, first_name:"first_name1", last_name:"lastname1", email:"[email protected]"}, {user_id:7, first_name:"user2", last_name:"test2", email:""}, {user_id:72, first_name:"testing343", last_name:"", email:""}, {user_id:246, first_name:"aaa", last_name:"ssss", email:""}] 

因此,它現在的數組。然後你可以打電話給.sort()

data.sort(function(a, b) { 
    var x = a.first_name.toLowerCase(), y = b.first_name.toLowerCase(); 
    return x < y ? -1 : x > y ? 1 : 0; 
});