基于多个值排序数组

问题描述 投票:2回答:3

我正在尝试根据多个值report_yr和report_qtr对以下数组进行排序,数组应首先按年份排序,然后再按季度(同一年)排序。

//输入数组

let arr = [{
  report_yr: '2008',
  report_qtr: '1'
},
{
  report_yr: '2019',
  report_qtr: '3'
},
{
  report_yr: '2019',
  report_qtr: '4'
},
{
  report_yr: '2017',
  report_qtr: '2'
},
{ report_yr: '2008',
  report_qtr: '2'
}];

//预期输出:

[ 
{ report_yr: '2019',
report_qtr: '4' },
{ report_yr: '2019',
report_qtr: '3' },
{ report_yr: '2008',
report_qtr: '1'
},{ report_yr: '2008',
report_qtr: '2'
},
{ report_yr: '2017',
report_qtr: '2' } ];

//我正在尝试:

我正在为此尝试使用loadash方法,

_.sortBy(arr,
      ['report_yr', 'report_qtr']);

类似地尝试了orderBy,但到目前为止还没有运气。

javascript
3个回答
0
投票

您可以使用sort方法,并使用普通的javascript。

let arr = [{"report_yr":"2008","report_qtr":"1"},{"report_yr":"2019","report_qtr":"3"},{"report_yr":"2019","report_qtr":"4"},{"report_yr":"2017","report_qtr":"2"},{"report_yr":"2008","report_qtr":"2"}]

arr.sort((a, b) => b.report_yr - a.report_yr || b.report_qtr - a.report_qtr)
console.log(arr)

0
投票

这可能对您有用。

data.sort(function (x, y) {
    var n = y.report_qtr - x.report_qtr;
    if (n !== 0) {
        return n;
    }

    return y.report_yr- x.report_yr;
});

0
投票

使用sort方法

let arr = [{
  report_yr: '2008',
  report_qtr: '1'
},
{
  report_yr: '2019',
  report_qtr: '3'
},
{
  report_yr: '2019',
  report_qtr: '4'
},
{
  report_yr: '2017',
  report_qtr: '2'
},
{ report_yr: '2008',
  report_qtr: '2'
}]

arr.sort((b, a) => +a.report_yr - +b.report_yr || +a.report_qtr - +b.report_qtr )

console.log(arr)
© www.soinside.com 2019 - 2024. All rights reserved.