jQuery:对每个$.的结果进行排序

jQuery: Sort results of $.each

本文关键字:结果 排序 jQuery      更新时间:2023-09-26

我能找到的关于使用$.each的人的唯一例子是html示例,这不是我想要的。我有以下对象:

var obj = {
    obj1: 39,
    obj2: 6,
    obj3: 'text'
    obj4: 'text'
    obj5: 0
};

我像这样循环浏览对象:

$(array).each(function(index, value) {
    // ...
});

我想按obj3obj4排序。最好不要使用异步方法,如何在输出之前(或输出期间)对结果进行排序?(我也不想循环两次,因为在任何给定的时间都可能有数百个。

var array = {
    obj1: 39,
    obj2: 6,
    obj3: 'text'
    obj4: 'text'
    obj5: 0
};

不是数组(尽管有其名称)。它是一个物体。按obj3obj4排序的想法实际上没有意义。

现在,如果要将此对象转换为对象数组,可以使用array.sort方法对该数组进行排序。

var array = [
    { obj1: 39,
      obj2: 6,
      obj3: 'text'
      obj4: 'text'
      obj5: 0
    },{ obj1: 40,
      obj2: 7,
      obj3: 'text2'
      obj4: 'text3'
      obj5: 0
    }
];
array.sort(function(a, b) {
    var textA = a.obj3.toLowerCase();
    var textB = b.obj3.toLowerCase();
    if (textA < textB) 
       return -1; 
    if (textA > textB)
       return 1;
    return 0; 
});

当然,按照数字属性排序,它只会是:

array.sort(function(a, b) {
    return a.obj1 - b.obj1;
});
对象属性没有定义的顺序。它们无法排序。数组确实有顺序。如果您希望键按特定顺序排列,则必须将它们放在一个数组中并定义顺序。

您可以从对象中获取所有属性名称(例如键),对它们进行排序,然后根据需要按顺序迭代属性。要做到这一点,你应该这样做:

var obj = {
    obj1: 39,
    obj2: 6,
    obj3: 'text'
    obj4: 'text'
    obj5: 0
};
var keys = [];
for (var prop in obj) {
    keys.push(prop);
}
keys.sort();
for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var value = obj[key];
    // do whatever you want to do with key and value
}

正如您将看到的,这需要额外的迭代来获取和排序键列表。我不知道该怎么办。获取密钥可以在具有obj.keys()的现代浏览器中完成,但在内部,这可能是对对象属性的迭代,您需要一个填充程序才能在旧浏览器中工作。