我有一个物体对象。 (因为我想使用关联数组,所以对象的对象,而不是对象的数字数组)
var tasks=new Object();
for(...){
tasks[foo-i]={};
tasks[foo-i].index=....;
tasks[foo-i].name=...;
}
我有一个函数,它将输出任务的名称,但它们必须按索引按升序排列。所以,我必须有一个临时的排序功能。 你会怎么做? 感谢
答案 0 :(得分:0)
也许有一种更优雅的方式,但这种方式从对象中获取所有任务键,对它们进行排序,然后使用有序索引数组按键顺序循环遍历原始对象(如果我正确理解了你的'重新尝试)。
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作为获取对象索引的快捷方式,但这并不是普遍可用的,因此无论如何您都必须有另一种方法来执行此操作。
再次阅读你的问题,我意识到可能有另一种方式来解释你的问题。也许您的意思是在索引顺序中,它是.name旁边的.index数据,而不是任务对象上的索引键。如果是这样,那将采取不同的惯例:
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);
}
答案 1 :(得分:0)
您可以将所有名称粘贴在临时数组中,然后在该数组上调用sort()
方法。
请检查此link
此致
答案 2 :(得分:-1)
您可以将函数传递给Array对象的sort方法,该方法用于确定数组中对象的顺序。默认情况下,它按字母和数字方式执行此操作,但数字方式有点混乱。以下是我如何解决您的情况,假设您用于对它们进行排序的索引是数字:
tasks.sort(function(obj1,obj2){
return obj1.index - obj2.index;
});
传递给sort方法的函数应该返回一个正整数,如果object1&gt; object2,0,如果object1 = object2,则返回一个负整数,如果object1