Bagaimana saya bisa mengubah besar object
menjadi array
dengan lodash?
var obj = {
22: {name:"John", id:22, friends:[5,31,55], works:{books:[], films:[],}
12: {name:"Ivan", id:12, friends:[2,44,12], works:{books:[], films:[],}
}
// transform to
var arr = [{name:"John", id:22...},{name:"Ivan", id:12...}]
javascript
arrays
object
lodash
siavolt
sumber
sumber
Jawaban:
Anda dapat melakukan
Untuk dokumentasi lihat di sini.
sumber
id
properti itu tidak ada dan Anda ingin membuatnya berdasarkan kunci dari masing-masing objek.var arr = _.values(_.mapKeys(obj, function(value, key) { value.id = key; return value; }));
return
nilai ke array seperti ini:const divisionsList = []; _.mapKeys(divisions, (value, key) => { divisionsList[key] = value; });
Saya menghargai komentar atau saran untuk meningkatkan pendekatan ini.const toArrayWithKey = (obj, keyAs) => _.values(_.mapValues(obj, (value, key) => { value[keyAs] = key; return value; }));
Output sebagai:
sumber
toArray
tidak ada cara untuk mempertahankan kunci jika diperlukan.Solusi asli modern jika ada yang tertarik:
atau (bukan IE):
sumber
Object.keys(obj).map(key=>({key,value: obj[key]}))
const arr = Object.keys(obj).map(id => ({ id, ...obj[id] }));
ini akan membawa seluruh objek ke dalam data yang dikembalikan no? (menggunakan 'id' karena penanya asli ingin menyimpan kuncinya sebagai prop id)Bagi saya, ini berhasil:
Itu berputar
ke
sumber
_.map(data, (v,k)=>({[k]: v}))
melihat jawaban saya untuk detail._.toPairs
dan_fromPairs
tambahan dan tidak perlu di sini.[{key: 'someKey', val: 'The value'}, {....},...]
Ada beberapa cara untuk mendapatkan hasil yang Anda kejar. Mari kita pecahkan dalam kategori:
Nilai ES6 saja :
Metode utama untuk ini adalah Object.values . Tetapi menggunakan Object.keys dan Array.map Anda juga bisa mendapatkan hasil yang diharapkan:
Tampilkan cuplikan kode
Nilai & Nilai ES6 :
Menggunakan peta dan ES6 dinamis / sifat-sifat yang dikomputasi dan perusakan Anda dapat mempertahankan kunci dan mengembalikan objek dari peta.
Tampilkan cuplikan kode
Hanya Nilai Lodash :
Metode yang dirancang untuk ini adalah
_.values
ada "pintas" seperti_.map
dan metode utilitas_.toArray
yang juga akan mengembalikan array yang hanya berisi nilai-nilai dari objek. Anda juga bisa_.map
melihat_.keys
dan mendapatkan nilai dari objek dengan menggunakanobj[key]
notasi.Catatan:
_.map
ketika melewati sebuah objek akan menggunakanbaseMap
handlernya yang pada dasarnyaforEach
berada di properti objek.Tampilkan cuplikan kode
Nilai & Nilai Lodash :
Tampilkan cuplikan kode
Perhatikan bahwa dalam contoh di atas ES6 digunakan (fungsi panah dan properti dinamis). Anda bisa menggunakan lodash
_.fromPairs
dan metode lain untuk membuat objek jika ES6 merupakan masalah.sumber
Jika Anda ingin kunci (id dalam hal ini) dipertahankan sebagai properti dari setiap item array yang dapat Anda lakukan
sumber
Pembaruan 2017: Object.values , nilai lodash, dan toArray melakukannya. Dan untuk melestarikan kunci peta dan menyebar operator bermain bagus:
sumber
Mengubah objek menjadi array dengan JavaScript biasa (
ECMAScript-2016
)Object.values
:Jika Anda juga ingin tetap menggunakan tombol
Object.entries
danArray#map
suka ini:sumber
var arr = _.map(obj)
Anda dapat menggunakan
_.map
fungsi (keduanyalodash
danunderscore
) denganobject
juga, itu akan menangani kasus itu secara internal, beralih ke setiap nilai dan kunci dengan iterate Anda, dan akhirnya mengembalikan array. Infact, Anda dapat menggunakannya tanpa iteratee (adil)_.map(obj)
) jika Anda hanya menginginkan array nilai. Bagian baiknya adalah bahwa, jika Anda memerlukan transformasi apa pun di antaranya, Anda dapat melakukannya dalam sekali jalan.Contoh:
Tampilkan cuplikan kode
Namun, jika Anda ingin mengubah objek Anda dapat melakukannya, bahkan jika Anda perlu mempertahankan kunci, Anda dapat melakukannya (
_.map(obj, (v, k) => {...}
) dengan argumen tambahan dimap
dan kemudian menggunakannya seperti yang Anda inginkan.Namun ada solusi Vanilla JS lainnya untuk ini (karena setiap
lodash
solusi harus ada versi JS murni itu) seperti:Object.keys
dan kemudianmap
mereka untuk nilaiObject.values
(dalam ES-2017)Object.entries
lalumap
setiap pasangan kunci / nilai (dalam ES-2017)for...in
lingkaran dan gunakan setiap tombol untuk nilai fetingDan masih banyak lagi. Tapi karena pertanyaan ini untuk
lodash
(dan mengasumsikan seseorang sudah menggunakannya) maka Anda tidak perlu berpikir banyak tentang versi, mendukung metode dan penanganan kesalahan jika tidak ditemukan.Ada solusi lodash lain seperti
_.values
(lebih mudah dibaca untuk perpose tertentu), atau mendapatkan pasangan dan kemudian memetakan dan sebagainya. tetapi dalam hal kode Anda memerlukan fleksibilitas agar Anda dapat memperbaruinya di masa depan karena Anda perlu sedikit melestarikankeys
atau mengubah nilai, maka solusi terbaik adalah menggunakan satu_.map
seperti ditambahkan dalam jawaban ini. Itu tidak akan terlalu sulit karena mudah dibaca juga.sumber
Objek untuk Array
Dari semua jawaban saya pikir yang ini adalah yang terbaik:
yang mengubah:
untuk:
Array ke Objek
Untuk mengubah kembali:
Untuk mengubah kembali menjaga kunci dalam nilai:
Akan memberi:
Untuk contoh terakhir Anda juga dapat menggunakan lodash
_.keyBy(arr, 'key')
atau_.keyBy(arr, i => i.key)
.sumber
Jika Anda ingin pemetaan khusus (seperti Array.prototype.map) asli dari Obyek menjadi Array, Anda bisa menggunakan
_.forEach
:Lihat
lodash
dokumen _.forEach https://lodash.com/docs/#forEachsumber