使用 Lodash 按值对对象数组进行排序

我正在尝试按“ name”值对数组排序(使用 Lodash)。然而,我使用 Lodash 文档创建了下面的解决方案。OrderBy 似乎没有任何影响。有人能告诉我们正确的数组排序方法吗?

字符数组

[
{
"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"
}
]

功能代码

 var chars = this.state.characters;


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


this.setState({characters: chars})
261632 次浏览

此方法 orderBy不更改输入数组, 你必须把结果赋给你的数组:

var chars = this.state.characters;


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


this.setState({characters: chars})

可以使用 loash 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)

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

orderBy(items, (a) => new Date(a.createdAt), ['asc']) // or 'desc'

如果您正在使用 moment库,则:

orderBy(items, (a) => moment(a.createdAt), 'asc')

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