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

标签 javascript arrays sorting underscore.js

我有一个对象数组

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

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

但现在我需要一个依赖于另一个数组的自定义排序顺序:
["any","foo","some","bar"]

我的 sortBy 回调必须如何按照我的自定义顺序对我的对象进行排序?

最佳答案

这很简单:

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

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

当心 - 这段代码很复杂 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) 排序)。

关于javascript - 如何使用下划线根据自定义排序顺序对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36619967/

相关文章:

c# - “标准化”概率数组

javascript - 如何在 JavaScript 中根据数组中对象的属性对数组进行排序

java - 使用数组和只有一个循环的奇数之前的偶数

c++ - 定长结构重新排列 : should I use array or linked list?

javascript - 仅在主页上保留启用的 HTML 元素

javascript - 如何限制从特定函数创建的实例数量

java - 如何将整数数组转换为枚举数组?

javascript - jquery 事件函数无法正常工作

javascript - 将谷歌图表保存到图像中并在新选项卡中打开它们

arrays - 内置函数的运行时间