эффективно сортировать массив или массив с помощью jquery - PullRequest
2 голосов
/ 24 ноября 2011

Меня интересует, как бы вы наиболее эффективно сортировали следующие данные с помощью 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 ]

1 голос
/ 24 ноября 2011

Поскольку вы используете метод 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);
});
0 голосов
/ 24 ноября 2011

используйте это так

$(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>");
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...