Sort by multiple fields in Lodash 2.x

Assume this array:

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

I want to sort by weight and for each kind of weight, sorting by firstNames (nested type).

Result:

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

I quickly achieve this using 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();

Is there a better way to achieve this using Lodash 2.4.1?

+4
source share
2 answers

You can associate two types:

_(members).sortBy('firstName').sortBy('weight').value()
+6
source

It's even very simple Javascript is very short.

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>');
Run code
+4
source

Source: https://habr.com/ru/post/1617528/


All Articles