按整数值排序后按特定顺序对对象进行排序

我目前正在尝试将一组对象排序为特定顺序。


我目前按级别对其进行排序-效果很好,但是我需要按如下所示对其进行排序,其中“连接器”类型必须只能出现在“子句”类型之后和之前,如下所示:


[

  {

    "type": "Clause",

    "level": 1

  },

  {

    "type": "Concatenator",

    "level": 1

  },

  {

    "type": "Clause",

    "level": 2

  },

  {

    "type": "Concatenator",

    "level": 2

  },

  {

    "type": "Clause",

    "level": 2

  },

  {

    "type": "Concatenator",

    "level": 3

  },

  {

    "type": "Clause",

    "level": 3

  },

  {

    "type": "Concatenator",

    "level": 3

  },

  {

    "type": "Clause",

    "level": 3

  },

  {

    "type": "Concatenator",

    "level": 4

  },

  {

    "type": "Clause",

    "level": 4

  },

  {

    "type": "Concatenator",

    "level": 4

  },

  {

    "type": "Clause",

    "level": 4

  }

]

下面是我目前拥有的代码,它目前仅按级别排序,并尝试按我想要的方式对其进行排序:


conditionsArr = [{

    "type": "Concatenator",

    "level": 3

  },

  {

    "type": "Clause",

    "level": 4

  },

  {

    "type": "Clause",

    "level": 1

  },

  {

    "type": "Concatenator",

    "level": 1

  },

  {

    "type": "Clause",

    "level": 3

  },

  {

    "type": "Clause",

    "level": 4

  },

  {

    "type": "Clause",

    "level": 3

  },

  {

    "type": "Concatenator",

    "level": 4

  },

  {

    "type": "Clause",

    "level": 2

  },

  {

    "type": "Concatenator",

    "level": 2

  },

  {

    "type": "Concatenator",

    "level": 3

  },

  {

    "type": "Clause",

    "level": 2

  },

  {

    "type": "Concatenator",

    "level": 4

  }

]



function sortByLevel(conditionsArr) {

  return conditionsArr.sort(function(a, b) {

    return a.level - b.level;

  }).sort(function(a, b) {

    if (a.type === b.type)

      return -1;

    return 0;

  });

}

我尝试过另一种排序,并查看了其他答案以获取灵感,但我无法将其按排序后半部分所需的顺序排列。


关于如何对它进行排序有什么建议吗?


慕森卡
浏览 83回答 1
1回答

守着一只汪

你可以将对象分组level,level Clause为每个和Concatenator不同的数组收集通过迭代分组对象来重建一个新数组使用变量i来获得交替types。var array = [{ type: "Concatenator", level: 3 }, { type: "Clause", level: 4 }, { type: "Clause", level: 1 }, { type: "Concatenator", level: 1 }, { type: "Clause", level: 3 }, { type: "Clause", level: 4 }, { type: "Clause", level: 3 }, { type: "Concatenator", level: 4 }, { type: "Clause", level: 2 }, { type: "Concatenator", level: 2 }, { type: "Concatenator", level: 3 }, { type: "Clause", level: 2 }, { type: "Concatenator", level: 4 }],    order = { Clause: 0, Concatenator: 1 },    temp = array.reduce((r, o) => {        r[o.level] = r[o.level] || [[], []];        r[o.level][order[o.type]].push(o);        return r;    }, {}),    i = 0,    result = Object        .keys(temp)        .sort((a, b) => a - b)        .flatMap(k => {            var r = [];            while (temp[k][i].length) {                r.push(temp[k][i].shift());                i = 1 - i;            }            return r;        });console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript