Saya memiliki data sampel ini yang dikembalikan dari API.
Saya menggunakan Lodash _.groupBy
untuk mengubah data menjadi objek yang dapat saya gunakan dengan lebih baik. Data mentah yang dikembalikan adalah ini:
[
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
},
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
Saya ingin _.groupBy
fungsi mengembalikan objek yang terlihat seperti ini:
[
{
color: "blue",
users: [
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
}
]
},
{
color: "green",
users: [
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
}
]
Saat ini saya menggunakan
_.groupBy(a, function(b) { return b.color})
yang mengembalikan ini.
{blue: [{..}], green: [{...}]}
pengelompokannya benar, tetapi saya benar-benar ingin menambahkan kunci yang saya inginkan ( color
, users
). apakah ini mungkin digunakan _.groupBy
? atau LoDash
utilitas lain ?
javascript
sorting
underscore.js
grouping
lodash
pengguna1767105
sumber
sumber
_.object
merupakan alias untuk_.zipObject
)._.zip
dan_.pair
masih banyak lagi.pairs()
metode tersebut tidak ada lagi. Versi lodash 4.0 yang diperbarui dari contoh ini adalah:.chain(data).groupBy('color') .toPairs().map(function (pair) { return _.zipObject(['Name', 'Suppliers'], air); }).value();
_.chain
dianggap sebagai praktik yang buruk sekarang.Bukankah sesederhana ini?
sumber
cara lain
sumber
Jawaban dengan suara terbanyak menggunakan fungsi Lodash
_.chain
yang sekarang dianggap sebagai praktik buruk "Mengapa menggunakan_.chain
adalah kesalahan."Berikut adalah beberapa baris yang mendekati masalah dari perspektif pemrograman fungsional :
Di mana
input
array yang ingin Anda konversi.sumber
flow()
alih-alih dichain()
sini, tetapi pemeriksaan jenis skrip menjadi gila dengan fungsi yang disusun. Saya berharap kami memiliki tingkat dukungan yang sama seperti yang kami miliki saat ini di RxJSpipe()
, misalnya, di lodash.map((users, color) => ({color, users}))
daripadamap((value, key) => ({ color: key, users: value }))
Terima kasih @thefourtheye , kode Anda sangat membantu. Saya membuat fungsi umum dari solusi Anda menggunakan Lodash versi 4.5.0.
Untuk menggunakannya:
Berikut adalah fiddler yang diperbarui;
https://jsfiddle.net/sc2L9dby/
sumber
Ini adalah versi terbaru menggunakan lodash 4 dan ES6
sumber
Saya akan menyarankan pendekatan yang berbeda, dengan menggunakan perpustakaan saya sendiri, Anda dapat melakukan ini dalam beberapa baris:
Ini akan sedikit sulit dengan lodash atau Underscore karena argumen berada dalam urutan yang berlawanan, jadi Anda harus menggunakan
_.partial
banyak.sumber
Contoh groupBy dan jumlah kolom menggunakan Lodash 4.17.4
sumber
Pada 2017 lakukan itu
sumber