使用lodash按多个字段对数组中的项进行排序

And*_*rle 24 javascript underscore.js lodash

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

[
  {a: 'a', b: 2},
  {a: 'a', b: 1},
  {a: 'b', b: 5},
  {a: 'a', b: 3},
]
Run Code Online (Sandbox Code Playgroud)

我期待这个结果

[
  {a: 'a', b: 1},
  {a: 'a', b: 2},
  {a: 'a', b: 3},
  {a: 'b', b: 5},
]
Run Code Online (Sandbox Code Playgroud)

Dan*_*lan 37

在当前版本的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);});
Run Code Online (Sandbox Code Playgroud)

它会将此输出到控制台:

"a 1"
"a 2"
"a 3"
"b 5"
Run Code Online (Sandbox Code Playgroud)

警告:请参阅以下评论.这看起来像是sortByAll在版本3中简要调用过,但现在它又回来了sortBy.

  • 从v3.0.0开始,这不起作用.语法是正确的,但使用的方法是`_.sortByAll(data,["a","b"]);``_.sortBy`和`_.sortByAll`之间的区别是`_.sortBy`排序从一个iteratee和`_.sortByAll`按属性名称排序.[api reference](https://lodash.com/docs#sortByAll)和[changelog](https://github.com/lodash/lodash/wiki/Changelog#v300) (11认同)
  • v.s.0中不再存在_.sortByAll.https://github.com/lodash/lodash/wiki/Changelog (5认同)
  • 您也可以添加第三个参数(顺序方向),例如_.orderBy(collection,['fieldA','fieldB'],['asc','desc']);` (5认同)
  • _.sortByAll在3.10版本中效果很好。在4.0以上版本中,请使用_.sortBy。谢谢! (2认同)