используйте Lodash для сортировки массива объектов по значению


105

Я пытаюсь отсортировать массив по значению «имя» (используя 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})

Ответы:


205

Этот метод 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'
Artémis Young

1
" orderByне изменяет входной массив" ... " orderByменяет массив на месте." Предполагаемая формулировка, вероятно, «не на месте» или «не на месте». См .: en.wikipedia.org/wiki/In-place_algorithm
Дем

На самом деле вы правы, я просто удалил это предложение, так как оно ничего не добавило к ответу
Artémis Young

Этот второй параметр ['asc']не упорядочивает по возрастанию, чтобы добиться этого, можно было бы добавить reverse()после orderBy(по крайней мере, в версии 4.17.15)
Диего Ортис

64

Вы можете использовать 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')
Дон

8
По сравнению с orderBy, вы не можете передать тип сортировки sortBy, он всегда сортируется по возрастанию.
a_rahmanshah
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.