Javascript对象的对象排序

javascript sort object of objects

本文关键字:对象 排序 Javascript      更新时间:2023-09-26

我有一个Object of Objects。(因为我想使用关联数组,所以对象的对象,而不是对象的数值数组)

var tasks=new Object();
for(...){
tasks[foo-i]={};
tasks[foo-i].index=....;
tasks[foo-i].name=...;
}

我有一个函数,它将输出任务的名称,但它们必须根据索引升序排列。所以我需要一个临时的排序函数。你会怎么做呢?由于

选项1:按任务对象上的键的顺序输出:

也许有一种更优雅的方法,但这种方法从对象中获取所有任务键,对它们进行排序,然后使用有序索引数组按键顺序循环遍历原始对象(如果我理解正确的话)。

var indexArray = [];
var i;
for (i in tasks) {
    indexArray.push(i);   // collect all indexes
}
indexArray.sort(function(a,b) {return(a-b);});  // sort the array in numeric order
for (i = 0; i < indexArray.length; i++) {
    console.log(tasks[indexArray[i]].name);
}

你可以使用任务。键作为获取对象索引的快捷方式,但这并不是普遍可用的,因此无论如何您必须有另一种方法。

选项2:按照嵌入索引任务的顺序输出[i].index:

再次阅读你的问题,我意识到可能有另一种方式来解释你的问题。也许您指的是在索引顺序中,.index数据紧挨着.name,而不是任务对象上的索引键。如果是这样,那将使用不同的例程:
var sorted = [];
var i;
for (i in tasks) {
    sorted.push(tasks[i]);   // collect items from tasks into a sortable array
}
sorted.sort(function(a,b) {return(a.index - b.index);});  // sort the array in numeric order by embedded index
for (i = 0; i < sorted.length; i++) {
    console.log(sorted[i].name);
}

您可以将所有名称粘贴到临时数组中,然后在该数组上调用sort()方法。查看此链接

您可以将一个函数传递给Array对象的sort方法,该方法用于确定数组中对象的顺序。默认情况下,它按字母顺序和数字顺序进行排序,但数字方式有点混乱。下面是我如何解决您的情况,假设您用来对它们排序的索引是数字:

tasks.sort(function(obj1,obj2){
    return obj1.index - obj2.index;
});

传递给sort方法的函数如果object1>object2应该返回一个正整数,如果object1=object2应该返回0,如果object1

应该返回一个负整数