根据特定规则对对象进行排序

时间:2011-12-29 01:39:26

标签: javascript algorithm sorting

在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?
}

3 个答案:

答案 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]; }