繁体   English   中英

javascript 排序 object 的对象

[英]javascript sort object of objects

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

var tasks=new Object();

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

我有一个 function ,它将 output 任务的名称,但它们必须按照索引升序排列。 所以,我必须有一个临时的排序功能。 你会怎么做? 谢谢

选项 1:Output 按任务 object 上的键顺序:

也许有一种更优雅的方式,但这种方式从 object 中取出所有任务键,对它们进行排序,然后使用有序索引数组以键顺序循环通过原始 object(如果我理解正确你想要做)。

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

您可以使用 tasks.keys 作为获取 object 索引的快捷方式,但这并不是普遍可用的,因此无论如何您都必须有另一种方法。

选项 2:Output 按嵌入索引任务 [i].index 的顺序排列:

再次阅读您的问题,我意识到可能有另一种方式来解释您的问题。 也许您的意思是按索引顺序,即.name 旁边的.index 数据,而不是任务 object 上的索引键。 如果是这样,那将需要一个不同的例程:

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()方法。 检查此链接

问候

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

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

如果 object1>object2,则传递给 sort 方法的 function 应返回正 integer,如果 object1=object2 则返回 0,如果 object1=object2,则返回负 Z157DB7DF530023575515D366C9B672EZ

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM