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

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


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

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


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

我看到了similar question here,但这并不是我想要的,因为在我的情况下,顺序将是固定的,并且排序将不会基于随机字符串值。

最佳答案

尝试这个

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

关于javascript - 基于字符串值的对象的破折号排序数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36615012/

10-11 03:04