如何使用下划线根据自定义排序顺序对对象数组进行排序

How to sort an array of objects depending on a custom sort order using underscore

本文关键字:排序 对象 数组 顺序 下划线 自定义 何使用      更新时间:2023-09-26

我有一个对象数组

[
  {type:"foo",elements:[...]},
  {type:"bar",elements:[...]},
  {type:"any",[...]},
  {type:"some",elements:[...]}
]

我知道如何使用下划线的_.sortBy()方法按属性"type"对数组进行排序。

但现在我需要一个自定义排序顺序,它依赖于另一个数组:

["any","foo","some","bar"]

我的sortBy回调必须是什么样子才能按照我的自定义顺序对对象进行排序?

很简单:

_.sortBy(yourArrray, function(obj){
   return typesArray.indexOf(obj.type);
});

它根据obj.typetypesArray中的位置对yourArray进行排序。数组中不存在的类型优先。

请注意,此代码具有复杂性O(kn log n)。要改进它,请使用以下代码:

var yourTypes = {
   'any': 1,
   'foo': 2,
    'some': 3
}
_.sortBy(yourArrray, function(obj){
   return yourTypes [obj.type];
});

对象查找通常更快,导致O(1)访问(以及总体O(n-logn)排序)。