我有一个对象的对象。(因为我要使用关联数组,所以对象的对象,而不是对象的数值数组)
var tasks=new Object();
for(...){
tasks[foo-i]={};
tasks[foo-i].index=....;
tasks[foo-i].name=...;
}我有一个输出任务名称的函数,但它们必须按照索引的升序排列。所以,我必须有一个临时的排序函数。你会怎么做呢?谢谢
发布于 2011-07-14 06:26:21
选项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);
}您可以使用tasks.keys作为获取对象索引的快捷方式,但这并不是普遍可用的,因此无论如何您都必须有一种替代方法。
选项2:按嵌入索引tasksi.index的顺序输出:
再读一遍你的问题,我意识到可能还有另一种方式来解释你的问题。也许您是指在索引顺序中,.name旁边的.index数据,而不是tasks对象上的索引键。如果是这样的话,就需要一个不同的例程:
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);
}发布于 2011-07-14 06:27:56
您可以将所有名称放在一个临时数组中,然后对该数组调用sort()方法。检查此link
问候
发布于 2011-07-14 06:42:54
可以将函数传递给array对象的sort方法,该方法用于确定数组中对象的顺序。默认情况下,它按字母和数字顺序执行此操作,但数字方式有点混乱。下面是我如何解决您的问题,假设您用来对它们进行排序的索引是数字的:
tasks.sort(function(obj1,obj2){
return obj1.index - obj2.index;
});如果为object1>object2,则传递给sort方法的函数应返回正整数;如果为object1=object2,则返回0;如果为object1,则返回负整数
https://stackoverflow.com/questions/6686365
复制相似问题