如何按两个字段对数组进行排序(包括日期)

obi*_*obi 1 javascript sorting

我有一个对象数组,我想先按日期排序,然后按其数值排序.

let arr = [  
  {date: 2018-06-19 12:05:43.232Z, value: 3},
  {date: 2018-06-20 12:05:43.232Z, value: 4},  
  {date: 2018-06-18 12:05:43.232Z, value: 2},  
  {date: 2018-06-20 12:05:43.232Z, value: 4}, 
  {date: 2018-06-19 12:05:43.232Z, value: 5},     
  {date: 2018-06-18 12:05:43.232Z, value: 5},  
  {date: 2018-06-20 12:05:43.232Z, value: 5},  
  {date: 2018-06-19 12:05:43.232Z, value: 4},  
]
Run Code Online (Sandbox Code Playgroud)

我想按日期和值对每个索引进行排序,结果如下:

let arr = [
  {date: 2018-06-18 12:05:43.232Z, value: 2},
  {date: 2018-06-18 12:05:43.232Z, value: 5},

  {date: 2018-06-19 12:05:43.232Z, value: 3},
  {date: 2018-06-19 12:05:43.232Z, value: 4},
  {date: 2018-06-19 12:05:43.232Z, value: 5}, 

  {date: 2018-06-20 12:05:43.232Z, value: 3},
  {date: 2018-06-20 12:05:43.232Z, value: 4},     
  {date: 2018-06-20 12:05:43.232Z, value: 5},     
]
Run Code Online (Sandbox Code Playgroud)

怎么做到呢?

chr*_*con 5

你可以使用Array.sort ||

const res = arr.sort((a, b) => Date.parse(a.date) - Date.parse(b.date) || a.value - b.value);
console.log(res);
Run Code Online (Sandbox Code Playgroud)
<script>
let arr = [{
    date: '2018-06-19 12:05:43.232Z',
    value: 3
  },
  {
    date: '2018-06-20 12:05:43.232Z',
    value: 4
  },
  {
    date: '2018-06-18 12:05:43.232Z',
    value: 2
  },
  {
    date: '2018-06-20 12:05:43.232Z',
    value: 4
  },
  {
    date: '2018-06-19 12:05:43.232Z',
    value: 5
  },
  {
    date: '2018-06-18 12:05:43.232Z',
    value: 5
  },
  {
    date: '2018-06-20 12:05:43.232Z',
    value: 5
  },
  {
    date: '2018-06-19 12:05:43.232Z',
    value: 4
  },
]
</script>
Run Code Online (Sandbox Code Playgroud)