4

この JSON オブジェクトを first_name で並べ替えるにはどうすればよいですか?

{
    1  :{user_id:1, first_name:"first_name1", last_name:"lastname1", email:"user1@test.com"},
    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:""}
}
4

3 に答える 3

3

まず、JSON 文字列が無効です。eval()最初にそれをクリアします。現在の形式の文字列を強制され、機能しJSON.parse()ません。


オブジェクト キーは、仕様によって順不同です。キー名を静的に「ソート」してオブジェクトに固定することはできません。しかし、確かにキーネームをソートして、それらの値をその順序で操作できます。

例えば:

var json = '{1:{user_id:1, first_name:"first_name1", last_name:"lastname1", email:"user1@test.com"}, 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-shim ライブラリが利用できることを前提としています。

于 2012-07-31T00:35:13.860 に答える
3

Write your JSON object like the following:

data = [{user_id:1, first_name:"first_name1", last_name:"lastname1", email:"user1@test.com"}, {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:""}]

So that it's now an array. Then you can call .sort() on it.

data.sort(function(a, b) {
    var x = a.first_name.toLowerCase(), y = b.first_name.toLowerCase();
    return x < y ? -1 : x > y ? 1 : 0;
});
于 2012-07-31T00:37:34.200 に答える
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
  }
});
于 2012-07-31T00:28:47.843 に答える