użyj Lodash do sortowania tablicy obiektów według wartości

102

Próbuję posortować tablicę według wartości „nazwa” (przy użyciu Lodash). Użyłem dokumentów Lodash, aby utworzyć poniższe rozwiązanie, jednak .orderBy nie wydaje się mieć żadnego wpływu. Czy ktoś może rzucić trochę światła na prawidłowy sposób sortowania tablicy?

Tablica znaków

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

Kod funkcji

 var chars = this.state.characters;

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

 this.setState({characters: chars})
ariel
źródło

Odpowiedzi:

201

Ta metoda orderBynie zmienia tablicy wejściowej, musisz przypisać wynik do swojej tablicy:

var chars = this.state.characters;

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

 this.setState({characters: chars})
Artémis Young
źródło
hmmm, nadal nie wygląda na sortowanie tablicy. Nie jestem pewien, czy powinienem zaktualizować pytanie, czy stworzyć nowe
1
Zaktualizowałem odpowiedź, być może twój błąd wynika z przekazania dwóch parametrów zamiast tablicy dla'name', 'asc'
Artémis Young
1
" orderBynie zmienia tablicy wejściowej" ... " orderByzmienia tablicę w miejscu." Prawdopodobnie zamierzone sformułowanie brzmi „nie na miejscu” lub „nie na miejscu”. Zobacz: en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian
Właściwie masz rację, właśnie usunąłem to zdanie, ponieważ nic nie dodało do odpowiedzi
Artémis Young
Ten drugi parametr ['asc']nie porządkuje rosnąco, aby to osiągnąć, należałoby dodać a reverse()po orderBy(przynajmniej w wersji 4.17.15)
Diego Ortiz
64

Możesz użyć lodash sortBy ( https://lodash.com/docs/4.17.4#sortBy ).

Twój kod może wyglądać następująco:

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)
Caio Santos
źródło
32
Możesz także użyć skrótu:_.sortBy(myArray, 'name')
Don
8
W porównaniu z orderBytypem sortowania nie można przekazać, sortowanie sortByodbywa się zawsze w kolejności rosnącej.
a_rahmanshah