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


97

我试图按“名称”值对数组进行排序(使用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})

Answers:


190

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

var chars = this.state.characters;

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

 this.setState({characters: chars})

嗯,似乎仍然没有对数组进行排序。不知道我应该更新问题还是提出一个新问题

1
更新了答案,也许你的错误是由于传递两个参数,而不是一个数组为'name', 'asc'
ARTEMIS年轻

1
“” orderBy不更改输入数组“ ...” orderBy更改数组。预期的措词可能是“非原位”或“非原位”。参见:en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian

其实你是对的,我只是删除了这句话,因为它没有答案补充
ARTEMIS年轻

这第二个参数['asc']没有顺序递增,以达到该方法是添加reverse()orderBy(至少在15年4月17日版)
迭戈·奥尔蒂斯

60

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

32
您也可以使用速记:_.sortBy(myArray, 'name')
Don

7
与相比orderBy,您不能在中传递排序类型sortBy,它始终按升序排序。
a_rahmanshah
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.