使用jquery有效地分别对象数组

时间:2011-11-24 10:55:09

标签: jquery arrays sorting

我对如何使用jQuery最有效地对以下数据进行排序感兴趣:

我从服务器检索了一个json对象:

var data = {/*json-object*/};
$.each(data.level1.sub1, function(){
    if(this.name.length < 2) {
        this.type = "banana";
        itemarray.push(this);
    }
    else {
        this.type = "apple";
        itemarray.push(this);
    }
});

$.each(data.level2.sub1, function(){
    this.type = "kiwi";
    itemarray.push(this);
});

这让我想到我可以通过这样做列出数组中的内容(typeof对象,而不是“真实”数组):

if (itemarray.length){
    $.each(itemarray, function(index, value){
      $('#wrapper').append('<li>' + index + ' : ' + value.name + ' * ' + value.type + '</li>');
    });
}  

结果:

0 : abc * apple
1 : a * banana
2 : lala * apple
3 : bcd - Copy * kiwi
4 : okl * banana

现在我想对数组(再次为typeof对象)进行排序:按类型分组并按类型排序asc。你会怎么建议这样做?

2 个答案:

答案 0 :(得分:1)

由于您使用的是itemarray.push方法,我假设itemarray是一个真正的数组。数组对象(注意:typeof [] === "object")支持sort()方法。

将原生Array.sort方法与函数结合使用,如下所示。此方法直接修改数组。

var itemarray = [{type:"C"},{type: "B"}]; //Your array looks like this

//ASC result: [{type:"C"}, {type:"B"}]
itemarray.sort(function(x,y){
    return x.type.localeCompare(y.type);
});
//DESC result: [{type:"B"}, {type: "B"}]
itemarray.sort(function(x,y){
    return y.type.localeCompare(x.type);
});

答案 1 :(得分:0)

以这种方式使用

$(document).ready(function () {
  var data = {/*json-object*/};      
         ;
  data = data.sort(function (a, b) {
    if (a.type < b.type) { return -1 };
    if (a.type > b.type) { return 1 };
    return 0;
  });
  $.each(data, function (index, value) {
    $("#wrapper").append("<li>" + value.index + " : " + value.name + " * " + value.type + "</li>");
  });
});