按Lodash 2.x中的多个字段排序

Sort by multiple fields in Lodash 2.x

本文关键字:字段 排序 Lodash      更新时间:2023-09-26

假设此数组:

var members = [
  {firstName: 'Michael', weight: 2}, 
  {firstName: 'Thierry', weight: 1}, 
  {firstName: 'Steph', weight: 3},
  {firstName: 'Jordan', weight: 3}, 
  {firstName: 'John', weight: 2}
];

我想按权重排序,对于每种权重,都按firstNames排序(嵌套排序)。

结果是:

[
  {firstName: 'Thierry', weight: 1}, 
  {firstName: 'John', weight: 2}, 
  {firstName: 'Michael', weight: 2}, 
  {firstName: 'Jordan', weight: 3}, 
  {firstName: 'Steph', weight: 3}
];

我使用Lodash 2.4.1:快速实现了这一点

return _.chain(members)
    .groupBy('weight')
    .pairs()
    .sortBy(function(e) {
        return e[0];
    })
    .map(function(e){
        return e[1];
    })
    .map(function(e){
        return _.sortBy(e, 'firstName')
    })
    .flatten()
    .value();

使用Lodash 2.4.1有更好的方法来实现它吗?

您可以链接两种排序:

_(members).sortBy('firstName').sortBy('weight').value()

它甚至在普通的Javascript中都很短。

var members = [
    { firstName: 'Michael', weight: 2 },
    { firstName: 'Thierry', weight: 1 },
    { firstName: 'Steph', weight: 3 },
    { firstName: 'Jordan', weight: 3 },
    { firstName: 'John', weight: 2 }
];
members.sort(function (a, b) {
    return a.weight - b.weight || a.firstName.localeCompare(b.firstName);
});
document.write('<pre>' + JSON.stringify(members, 0, 4) + '</pre>');

如果您使用的是旧版本的lodash ,则使用lodash的另一种变体

var members = [
{ firstName: 'Michael', weight: 2 },
{ firstName: 'Thierry', weight: 1 },
{ firstName: 'Steph', weight: 3 },
{ firstName: 'Jordan', weight: 3 },
{ firstName: 'John', weight: 2 }

];

var result=_.sortBy(members,['firstname','weight'],['asc','asc']);

console.log('result',result);