【问题标题】:How to sort an object array by multiple keys in javascript using _.sortBy() method of Javascript Underscore.js?如何使用 Javascript Underscore.js 的 _.sortBy() 方法通过 javascript 中的多个键对对象数组进行排序?
【发布时间】:2018-12-18 00:09:30
【问题描述】:

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

我的代码:

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

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

【问题讨论】:

  • 那么,正确的结果是什么?将其包含在您的问题中。
  • 您考虑过阅读文档吗? underscorejs.org/#sortBy
  • 正确答案在预期结果中
  • sortby using Underscore的可能重复
  • _.sortBy 将属性名称(以字符串形式)或函数作为其第二个参数。考虑在你的情况下使用一个函数

标签: javascript arrays sorting underscore.js


【解决方案1】:

你需要为更复杂的比较提供函数:

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>

【讨论】:

  • 非常感谢!它确实有效,而且代码比我想象的要少。
【解决方案2】:

根据文档:

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

问候, 文森特

【讨论】:

  • 我的错,我以为你在谈论 lodash 库,而不是下划线。
【解决方案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 , 
       function(value) {
         return value.fname + ' ' + value.lname;
       }
    )
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2019-02-23
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2019-09-07
    • 2019-07-18
    相关资源
    最近更新 更多