Javascript 基于多个值对数组进行排序

Javascript 基于多个值对数组进行排序,javascript,Javascript,我正在尝试根据多个值对下面的数组进行排序,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_

我正在尝试根据多个值对下面的数组进行排序,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来完成此操作

让arr=[{“报告年”:“2008”,“报告年”:“1”},{“报告年”:“2019”,“报告年”:“3”},{“报告年”:“2019”,“报告年”:“4”},{“报告年”:“2017”,“报告年”:“2”},{“报告年”:“2008”,“报告年”:“2”}]
arr.sort((a,b)=>b.report_yr-a.report_yr | b.report_qtr-a.report_qtr)

console.log(arr)
这可能适合您

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

使用
排序
方法

让arr=[{
2008年报告,
报告数量:“1”
},
{
报告年份:2019年,
报告数量:“3”
},
{
报告年份:2019年,
报告数量:“4”
},
{
报告年度:“2017年”,
报告数量:“2”
},
{报告"2008",,
报告数量:“2”
}]
arr.sort((b,a)=>+a.report_yr-+b.report_yr | |+a.report_qtr-+b.report_qtr)

console.log(arr)
如果您添加
report\u yr
+
report\u qtr
并按如下方式降序排序会怎么样

    arr = arr.sort((a, b) => {
        const one = parseInt(a.report_yr) + parseInt(a.report_qtr);
        const two = parseInt(b.report_yr) + parseInt(b.report_qtr);
        if (one > two) {
            return -1
        }
        return 1;
    });

使用
.orderBy
而不是
.sortBy
。如果不这样做,则无法按降序排序

这将对
report\u qtr
进行降序排序和
report\u yr
升序排序。我注意到你想要的输出与排序相矛盾

让arr=[{
2008年报告,
报告数量:“1”
}, {
报告年份:2019年,
报告数量:“3”
}, {
报告年份:2019年,
报告数量:“4”
}, {
报告年度:“2017年”,
报告数量:“2”
}, {
2008年报告,
报告数量:“2”
}];
let Sortedar=u.orderBy(arr,['report\u qtr','report\u yr'],['desc','asc']);
控制台日志(分拣机)
。作为控制台包装器{
排名:0;
最大高度:100%!重要;
}

为什么当
报告年份
2018年
时,您的结果会随着
报告年份
而上升,而当
报告年份
2019年
时,对象会下降?