використовуйте Lodash для сортування масиву об’єкта за значенням


97

Я намагаюся відсортувати масив за значенням "name" (за допомогою Lodash). Однак я використав документи Lodash для створення наведеного нижче рішення, однак. Хтось може пролити світло на правильний спосіб сортування масиву?

Масив символів

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

Відповіді:


191

Цей метод 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
Дієго Ортіс,

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')
Дон

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