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

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

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)

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.