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})

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})

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)

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.