如何使用JavaScript Underscore.js的_.sortBy()方法通过javascript中的多个键对对象数组进行排序?

时间:2018-07-10 08:14:30

标签: javascript arrays sorting underscore.js

我正在使用 Javascript Underscore.js _。sortBy()方法按多个键对对象数组进行排序。我使用名称对象中的名字和姓氏进行排序。

我的代码:

var names = [
  { fname: 'Chloe', lname: 'Bennet' },
  { fname: 'Adam', lname: 'Levine' },
  { fname: 'Chris', lname: 'Hemsworth' },
  { fname: 'Justin', lname: 'Bieber' },
  { fname: 'Chloe', lname: 'Moretz' },
  { fname: 'Taylor', lname: 'Swift' }
];

console.log(_.sortBy(someData, 'fname' + ' ' + 'lname')

预期结果:

{ fname: 'Adam', lname: 'Levine' },
{ fname: 'Chloe', lname: 'Bennet' },
{ fname: 'Chloe', lname: 'Moretz' },
{ fname: 'Chris', lname: 'Hemsworth' },
{ fname: 'Justin', lname: 'Bieber' },
{ fname: 'Taylor', lname: 'Swift' }

但是它没有对数组进行排序。

4 个答案:

答案 0 :(得分:3)

您需要提供功能以进行更复杂的比较:

var names = [
  { fname: 'Chloe', lname: 'Bennet' },
  { fname: 'Adam', lname: 'Levine' },
  { fname: 'Chris', lname: 'Hemsworth' },
  { fname: 'Justin', lname: 'Bieber' },
  { fname: 'Chloe', lname: 'Moretz' },
  { fname: 'Taylor', lname: 'Swift' }
];

console.log(_.sortBy(names, ({ fname, lname }) => fname + ' ' + lname))
.as-console-wrapper {max-height: 100% !important;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>

答案 1 :(得分:0)

根据文档:

var names = [
  { fname: 'Chloe', lname: 'Bennet' },
  { fname: 'Adam', lname: 'Levine' },
  { fname: 'Chris', lname: 'Hemsworth' },
  { fname: 'Justin', lname: 'Bieber' },
  { fname: 'Chloe', lname: 'Moretz' },
  { fname: 'Taylor', lname: 'Swift' }
];
console.log(_.sortBy(names, ['fname', 'lname']));

关于, 文森特

答案 2 :(得分:0)

您可以尝试以下操作:

var names = [
  { fname: 'Chloe', lname: 'Bennet' },
  { fname: 'Adam', lname: 'Levine' },
  { fname: 'Chris', lname: 'Hemsworth' },
  { fname: 'Justin', lname: 'Bieber' },
  { fname: 'Chloe', lname: 'Moretz' },
  { fname: 'Taylor', lname: 'Swift' }
];

names = _.sortBy(names, (n => n.fname + n.lname))
console.log(names)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.backbone.js"></script>

答案 3 :(得分:0)

我想出了答案。感谢大家给我的想法。

var names = [
  { fname: 'Chloe', lname: 'Bennet' },
  { fname: 'Adam', lname: 'Levine' },
  { fname: 'Chris', lname: 'Hemsworth' },
  { fname: 'Justin', lname: 'Bieber' },
  { fname: 'Chloe', lname: 'Moretz' },
  { fname: 'Taylor', lname: 'Swift' }
];

console.log(
    _.sortBy(names , 
       function(value) {
         return value.fname + ' ' + value.lname;
       }
    )
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>