繁体   English   中英

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

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

我有一个对象数组

[
  {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);
});

它排序yourArray基于位置obj.typetypesArray 数组中不存在的类型首先出现。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM