Javascript中的JSON对象排序

时间:2012-06-04 17:50:12

标签: javascript jquery json

我有一个由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任何帮助?

3 个答案:

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

答案 1 :(得分:0)

我认为你打算写这个:

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

答案 2 :(得分: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;  
}

DEMO:http://jsfiddle.net/xmmPL/