jQuery:排序$ .each的结果

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

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

我像这样循环遍历对象:

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

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

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

不是数组(尽管它的名字)。 这是一个对象。 按obj4obj4排序的想法并没有多大意义。

现在,如果要将此对象转换为对象数组,则可以使用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()的现代浏览器中完成,但在内部可能无论如何都要通过对象属性进行迭代,并且您需要一个垫片以允许它在旧版浏览器中工作。