Lo-dash 根据字符串值对对象数组进行排序

Lo-dash sort array of objects based on string value

假设我有一个像这样的对象数组

var outer = [
  {
    "name": "T1",
    "inner": [
      {
        "type": "DAY"
      },
      {
        "type": "MONTH"
      },
      {
        "type": "WEEKLY"
      }
    ]
  },
  {
    "name": "T2",
    "inner": [
      {
        "type": "DAY"
      },
      {
        "type": "MONTH"
      },
      {
        "type": "WEEKLY"
      }
    ]
  }
];

我基本上是在尝试对内部数组中的对象进行排序,以便 'type' 按此顺序排列 - 月、周、日。像这样。

"inner": [
          {
            "type": "MONTH"
          },
          {
            "type": "WEEKLY"
          },
          {
            "type": "DAY"
          }
        ]

有没有办法使用 Lo-dash 来做到这一点?这是一个small fiddle

我看到了 ,但这并不是我想要的,因为在我的例子中,顺序是固定的,排序不会基于随机字符串值。

试试这个

var priority = [ "MONTH", "WEEKLY", "DAY" ];

outer.forEach(function(obj){
  obj.inner.sort(function(a,b){
    var ap = priority.indexOf(a.type);
    var bp = priority.indexOf(b.type);
    return ap-bp;
  });
}); 

另一种方法,我想是更简洁的方法(感谢 T.J。Crowder :))

var priority = {MONTH: 0, WEEKLY: 1, DAY: 2};

outer.forEach(function(obj){
  obj.inner.sort(function(a,b){
    var ap = priority[a.type];
    var bp = priority[b.type];
    return ap-bp;
  });
});