javascript - menggunakan Lodash untuk mengurutkan array objek berdasarkan nilai
Saya sedang mencoba mengurutkan array berdasarkan nilai 'name' (menggunakan Lodash). Saya menggunakan dokumentasi Lodash untuk membuat solusi di bawah ini tetapi .orderBy tampaknya tidak berpengaruh sama sekali. Apakah ada yang bisa menjelaskan cara yang benar untuk mengurutkan array?
Array Karakter
[
{
"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 #1
Metode orderBy ini tidak mengubah array input, Anda harus menetapkan hasilnya ke array Anda :
var chars = this.state.characters;
chars = _.orderBy(chars, ['name'],['asc']); // Use Lodash to sort array by 'name'
this.setState({characters: chars})
Jawaban #2
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)
Jawaban #3
Jika Anda perlu mengurutkan berdasarkan tanggal, Anda bisa menggunakan solusi ini:
orderBy(items, (a) => new Date(a.createdAt), ['asc']) // or 'desc'
Jika Anda menggunakan pustaka moment, maka:
orderBy(items, (a) => moment(a.createdAt), 'asc')
P.s. Perlu dicatat bahwa lodash tidak mengurutkan tanggal dalam format string, jadi Anda harus mengubahnya menjadi objek Date.
