简体   繁体   English

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

[英]How to sort an object array by multiple keys in javascript using _.sortBy() method of Javascript Underscore.js?

I am sorting an object array by multiple keys using the _.sortBy() method of Javascript Underscore.js . 我正在使用Javascript Underscore.js的_.sortBy()方法通过多个键对对象数组进行排序。 I used the first name and last name inside the names object for sorting. 我使用名称对象中的名字和姓氏进行排序。

My Code: 我的代码:

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')

Expected result: 预期结果:

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

But it is not sorting the array. 但这不是对数组进行排序。

You need to provide function for more complex comparisons: 您需要提供功能以进行更复杂的比较:

 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> 

According to the documentation: 根据文档:

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']));

Regards, Vincent 问候,文森特

You can try the following: 您可以尝试以下方法:

 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> 

I have come up with my answer. 我想出了答案。 Thanks to everyone for giving me idea. 感谢大家给我的想法。

 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> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM