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