gunakan Lodash untuk mengurutkan larik objek berdasarkan nilai

105

Saya mencoba mengurutkan array dengan nilai 'nama' (menggunakan Lodash). Saya menggunakan dokumen Lodash untuk membuat solusi di bawah ini namun .orderBy sepertinya tidak berpengaruh sama sekali. Adakah yang bisa menjelaskan cara yang benar untuk mengurutkan array?

Chars Array

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

Kode Fungsi

 var chars = this.state.characters;

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

 this.setState({characters: chars})
ariel
sumber

Jawaban:

205

Metode orderByini tidak mengubah larik masukan, Anda harus menetapkan hasilnya ke larik Anda:

var chars = this.state.characters;

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

 this.setState({characters: chars})
Artémis Young
sumber
hmmm, sepertinya masih belum mengurutkan array. Tidak yakin apakah saya harus memperbarui pertanyaan atau membuat yang baru
1
Memperbarui jawabannya, mungkin kesalahan Anda disebabkan karena melewatkan dua parameter alih-alih sebuah array untuk'name', 'asc'
Artémis Young
1
" orderBytidak mengubah larik masukan" ... " orderBymengubah larik pada tempatnya." Kata-kata yang dimaksudkan mungkin "tidak pada tempatnya" atau "tidak pada tempatnya". Lihat: en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian
Sebenarnya Anda benar, saya baru saja menghapus kalimat ini karena tidak menambahkan apa-apa pada jawaban
Artémis Young
Parameter kedua ['asc']itu tidak memerintahkan ascending, untuk mencapai itu caranya adalah dengan menambahkan reverse()setelah orderBy(setidaknya dalam versi 4.17.15)
Diego Ortiz
64

Anda dapat menggunakan lodash sortBy ( https://lodash.com/docs/4.17.4#sortBy ).

Kode Anda bisa seperti:

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
sumber
32
Anda juga dapat menggunakan singkatan:_.sortBy(myArray, 'name')
Don
8
Dibandingkan dengan orderBy, Anda tidak dapat mengirimkan jenis pengurutan sortBy, ia selalu mengurutkan berdasarkan urutan naik.
a_rahmanshah