在Javascript中,我需要根据类型对数组中的对象进行排序。每种类型都具有更高的优先级,因此具有“擦除”类型的对象应具有最高优先级,因此位于数组的前面(index = 0)。
对这些对象进行排序的最佳方法是什么?是否有可以执行此操作的内置函数?
例如:
function sortObjects( objs )
{
// objs is an unsorted array of objects
var animPriority = {"wipe": 1, "fly": 2, "iris": 3, "flip": 4, "cube": 5, "blur": 6, "zoom": 7, "fade": 8, "glow": 9, "rotate": 10};
for (var i=0; i<objs.length; i++)
if (objs[i].type == "wipe")
// bubblesort/bubbleswap element in objs[0] with objs[i]????
// a bubble sort doesn't seem efficient though?
}
答案 0 :(得分:16)
这可能是您正在寻找的解决方案:
objs.sort(function(a,b){
var order = ["wipe", "fly", "iris", "flip", "cube",
"blur", "zoom", "fade", "glow", "rotate"];
return order.indexOf(a.type) - order.indexOf(b.type);
});
完全符合要求。有关证明,请参阅this jsfiddle。
解决方案使用sort()
类的Array
方法,将回调传递给它,允许自定义比较。在这种情况下,比较基于.type
数组中比较元素的order
属性的位置。
答案 1 :(得分:4)
在JavaScript中非常简单:
首先,将您的对象放在一个数组中,例如myArray
。
接下来,编写一个接受对象的函数,如果第一个对象应该出现在数组中的第二个对象之前,则返回小于0的值,如果两个对象对于排序的目的是相等的,则返回0,或者大于如果第二个对象应出现在数组中的第一个对象之前,则为0。例如:
function myOrderFunc(a, b)
{
// if a should come before b, return a negative value
// if b should come before a, return a positive value
// if they are equally ranked in the sort order, return 0
}
最后,致电myArray.sort(myOrderFunc)
。这将对数组中的对象进行排序。如果您需要使用特定数据的更详细示例,请询问。
答案 2 :(得分:3)
JavaScript的array.sort
方法需要比较函数,只需传递此函数:
function compareFunc(a,b) { return animPriority[a.type] - animPriority[b.type]; }