关于javascript:基于字符串值的对象的破折号排序数组

Lo-dash sort array of objects based on string value

比方说,我有一个像这样的对象数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var outer = [
  {
   "name":"T1",
   "inner": [
      {
       "type":"DAY"
      },
      {
       "type":"MONTH"
      },
      {
       "type":"WEEKLY"
      }
    ]
  },
  {
   "name":"T2",
   "inner": [
      {
       "type":"DAY"
      },
      {
       "type":"MONTH"
      },
      {
       "type":"WEEKLY"
      }
    ]
  }
];

我基本上是在尝试对内部数组中的对象进行排序,以使"类型"按此顺序排列-MONTH,WEEKLY,DAY。像这样。

1
2
3
4
5
6
7
8
9
10
11
"inner": [
          {
           "type":"MONTH"
          },
          {
           "type":"WEEKLY"
          },
          {
           "type":"DAY"
          }
        ]

是否可以使用Lo-dash来做到这一点?这是一个小提琴。

我在这里看到了一个类似的问题,但这并不是我想要的,因为在我的情况下,顺序将是固定的,并且排序将不会基于随机字符串值。


试试这个

1
2
3
4
5
6
7
8
9
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 :))

1
2
3
4
5
6
7
8
9
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;
  });
});