使用Lodash按值排序对象数组

Jam*_*mes 66 arrays lodash

我试图通过'name'值对数组进行排序(使用Lodash).我使用Lodash文档创建了下面的解决方案.然而,orderBy似乎没有任何影响.任何人都可以对排序数组的正确方法有所了解吗?

Chars Array

[  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]
Run Code Online (Sandbox Code Playgroud)

功能代码

 var chars = this.state.characters;

 chars = _.orderBy(chars, 'name', 'asc'); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})
Run Code Online (Sandbox Code Playgroud)

Art*_*ung 143

此方法orderBy不会更改输入数组,您必须将结果分配给您的数组:

var chars = this.state.characters;

chars = _.orderBy(chars, ['name'],['asc']); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})
Run Code Online (Sandbox Code Playgroud)


Cai*_*tos 41

您可以使用lodash sortBy(https://lodash.com/docs/4.17.4#sortBy).

你的代码可能是这样的:

const myArray = [  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]

const myOrderedArray = _.sortBy(myArray, o => o.name)
Run Code Online (Sandbox Code Playgroud)

  • 您也可以使用简写:`_.sortBy(myArray,'name')` (25认同)
  • 与orderBy相比,您不能在sortBy中传递排序类型,它总是按升序排序。 (2认同)

Dam*_*ica 13

如果您需要按日期排序,可以使用以下解决方案:

orderBy(items, (a) => new Date(a.createdAt), ['asc']) // or 'desc'
Run Code Online (Sandbox Code Playgroud)

如果您正在使用moment库,那么:

orderBy(items, (a) => moment(a.createdAt), 'asc')
Run Code Online (Sandbox Code Playgroud)

Ps 请注意,它lodash不会对字符串格式的日期进行排序,因此您必须将其转换为 Date 对象。