【问题标题】:Sort items in an array by more than one field with lodash使用 lodash 按多个字段对数组中的项目进行排序
【发布时间】:2013-10-19 05:45:44
【问题描述】:

如何使用 lodash 按多个字段对一组对象进行排序。所以对于这样的数组:

[
  {a: 'a', b: 2},
  {a: 'a', b: 1},
  {a: 'b', b: 5},
  {a: 'a', b: 3},
]

我希望这个结果

[
  {a: 'a', b: 1},
  {a: 'a', b: 2},
  {a: 'a', b: 3},
  {a: 'b', b: 5},
]

【问题讨论】:

    标签: javascript underscore.js lodash


    【解决方案1】:

    在当前版本的 lodash (2.4.1) 中这要容易得多。你可以这样做:

    var data = [
        {a: 'a', b: 2},
        {a: 'a', b: 1},
        {a: 'b', b: 5},
        {a: 'a', b: 3},
    ];
    
    data = _.sortBy(data, ["a", "b"]);  //key point: Passing in an array of key names
    
    _.map(data, function(element) {console.log(element.a + " " + element.b);});
    

    它会输出到控制台:

    "a 1"
    "a 2"
    "a 3"
    "b 5"
    

    警告:请参阅下面的 cmets。这看起来在第 3 版中被简称为 sortByAll,但现在又改回为 sortBy

    【讨论】:

    • 这在 v3.0.0 中不起作用。语法是正确的,但使用的方法是 _.sortByAll(data, ["a", "b"]); _.sortBy_.sortByAll 之间的区别是 _.sortBy 对迭代对象排序,_.sortByAll 按属性名称排序。 api referencechangelog
    • _.sortByAll 在 v4.0 中不再存在。 github.com/lodash/lodash/wiki/Changelog
    • _.sortByAll 在 3.10 中效果很好。在 4.0+ 中使用 _.sortBy。谢谢!
    • 您也可以添加第三个参数(订单方向),如_.orderBy(collection, ['fieldA', 'fieldB'], ['asc', 'desc']);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2021-09-24
    相关资源
    最近更新 更多