简体   繁体   English

用jQuery对JSON排序

[英]Sort JSON with jquery

How do i sort this JSON object by first_name? 如何按first_name排序此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:""}
}

First of all, your JSON string is invalid. 首先,您的JSON字符串无效。 Clear that up first, you are forced to eval() the string in its current form, JSON.parse() won't work. 首先要明确一点,您被迫以当前形式eval()字符串, JSON.parse()将不起作用。


Object keys are unordered by spec. 对象键没有按规范排序。 You can't statically "sort" key names and freeze them in an object. 您不能静态地“排序”键名并将其冻结在对象中。 But you certainly can sort the keynames and operate in that order on their values. 但是您当然可以对键名进行排序,并按其值顺序进行操作。

For instance: 例如:

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 );
});

That code assumes the availabilty of an ES5 enabled JS engine or any kind of ES5-shim library. 该代码假定支持ES5的JS引擎或任何类型的ES5-shim库均可用。

Write your JSON object like the following: 如下编写JSON对象:

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. 然后,您可以在其上调用.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;
});

Why do you want to sort an object? 为什么要排序对象?

You'll want to loop this object into an array, and then sort the array. 您将需要将此对象循环到一个数组中,然后对该数组进行排序。 http://jsfiddle.net/z2xsC/ For example: 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
  }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM