0

我有一个 JSON.parse 返回的 JSON 对象 jobj=JSON.parse(jsnstr) 数组,我希望按其名称对其进行排序。我用过

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

但这并没有解决,而是我得到了未定义的 obj 任何帮助?

4

3 回答 3

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 数组中的所有内容都已排序,您可以通过 sorted[index].object 单独访问每个对象。

于 2012-06-04T17:55:50.767 回答
0

我想你的意思是写这个:

jobj=$(jobj).sort(function(a,b){  
     return a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1;  
});
于 2012-06-04T17:53:15.017 回答
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;  
}

演示:http: //jsfiddle.net/xmmPL/

于 2012-06-04T17:55:46.420 回答