Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jquery对JSON进行排序_Javascript_Jquery_Json - Fatal编程技术网

Javascript 使用jquery对JSON进行排序

Javascript 使用jquery对JSON进行排序,javascript,jquery,json,Javascript,Jquery,Json,如何按名字对这个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:"", emai

如何按名字对这个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:""}
}

为什么要对对象进行排序

您需要将此对象循环到一个数组中,然后对数组进行排序。例如:

//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
  }
});
//循环到数组中
var-arr=[];
for(var输入数据){
if(data.hasOwnProperty(key)){
arr.push(数据[键]);
}
}
//现在,对数组进行排序
arr.sort(函数(a,b){
var nameA=a.first_name.toLowerCase(),
nameB=b.first_name.toLowerCase();
如果(nameAnameB){
返回1
}否则{
返回0
}
});
首先,您的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垫片库可用。

编写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:""}]
所以它现在是一个数组。然后您可以对其调用
.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;
});
data.sort(函数(a,b){
var x=a.first_name.toLowerCase(),y=b.first_name.toLowerCase();
返回xy-1:0;
});

对象属性没有排序,所以您不能对它们进行排序。@穆萨:当然可以。不直接,但您当然可以对键名进行排序并按顺序执行某些操作。没有任何帮助?请参阅:排序算法看起来过于复杂,
String.prototype.localeCompare
将完成此工作。脚本正在正确排序和显示用户。有没有办法对它们进行永久性的分类?我的意思是重写了之前的json?@JSnewbie:不,不是真的。当然,您可以创建一个丑陋而笨重的冻结json字符串,但这对您毫无帮助。第二次
eval
parse
将其解析为ECMAscript对象时,键名再次是随机的。您唯一的选择是对其进行“实时”排序,然后按顺序对键/值进行操作。