Javascript按几个属性排序

时间:2018-08-08 08:11:14

标签: javascript arrays sorting

我正在尝试根据几个属性对对象数组进行排序。为了简单起见,这是我的数组

let arr = [
  {
    date: unixDate,
    code: "1001"
  },
  {
    date: unixDate,
    code: "0001"
  },
  {
    date: unixDate,
    code: "0000"
  },
  {
    date: unixDate,
    code: "0001"
  },
  {
    date: unixDate,
    code: "00001"
  }
]

我想要的订单是

  1. 0001(如果Date.now/100
  2. 0000(按DESC顺序排列的日期)
  3. 1001(按DESC顺序排列的日期)
  4. 00001(按DESC顺序排列的日期)

我当前的代码是

arr.sort((a,b) => {
  if(a.code === '0000') {
    return (a.code - b.code) || (a.date - b.date)
  } else {
    return (b.date - a.date)
  }
})

哪个没有在顶部对0001代码进行排序,我也不知道如何解决它。任何帮助表示赞赏。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以采用一组代码并在此之后进行排序,然后如果两个元素在日期之后获得相同的代码进行排序:

  const codes = ["0001", "0000", "1001", "00001"];

  arr.sort((a, b) => (
   codes.indexOf(a.code) - codes.indexOf(b.code) ||
   a.date - b.date
 ));

答案 1 :(得分:0)

逻辑:

  • 您可以创建一个对象,其中包含要显示的顺序。
  • 然后只将优先顺序排序为第一排序条件。
  • 此外,由于可能存在不优先项目的情况。在这种情况下,您可能会得到错误的输出。为此,请将值默认设置为priorities[code] || 0

var priorities = {
  '0001': 1,
  '0000': 2,
  '1001': 3,
  '00001': 4
}

let arr = [ { date: 'unixDate', code: "1001" }, { date: 'unixDate', code: "0001" }, { date: 'unixDate', code: "0000" }, { date: 'unixDate', code: "0001" }, { date: 'unixDate', code: "00001" } ];

arr.sort(function(a, b) {
  return (priorities[a.code] || 0) - (priorities[b.code] || 0) || a.date - b.date
});

console.log(arr)