使用jQuery有效地对对象或数组进行排序

3

我很感兴趣了解您如何使用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

现在我想对数组进行排序(这里的数组类型是object),按类型分组,并按每种类型按升序排序。你会如何建议实现?
2个回答

1

由于您正在使用itemarray.push方法,我假设itemarray是一个真正的数组。数组对象(注意:typeof [] ===“object”)支持{{link1: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);
});

嗨Rob,到目前为止非常感谢你。你的排序方法让我得到了以下结果:0 : aname * apple 1 : bname * apple 2 : cname * apple 3 : aname * banana 4 : bname * banana 2 : aname * kiwi 3 : bname * kiwi 当我使用第一种排序方法两次(x.type.localeCompare(y.type)而不是相反),这很好,因为它可以对类型和名称进行排序。但是我实际上想要的顺序是:apple,kiwi,banana!我尝试了几种组合,但sort()函数只能对类型和名称本身进行排序 - 那么我该如何做才能得到我想要的结果呢? - ho.s
好的,明白了:为了按照所需的顺序对类型进行分组,我在排序后执行以下操作:applearray = $.grep(itemarray, function(n, i){ return (n.type==="apple"); }); bananaarray = $.grep(itemarray, function(n, i){ return (n.type==="banana"); }); kiwiarray = $.grep(itemarray, function(n, i){ return (n.type==="kiwi"); }); itemarray=applearray.concat(kiwiarray).concat(bananarray); - ho.s

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接