Saya memiliki objek JSON yang sangat besar yang terstruktur seperti ini:
{A : 1, B : 2, C : 3, D : 4}
Saya membutuhkan fungsi yang dapat menukar nilai dengan kunci di objek saya dan saya tidak tahu bagaimana melakukannya. Saya membutuhkan keluaran seperti ini:
{1 : A, 2 : B, 3 : C, 4 : D}
Apakah ada cara saya dapat melakukan ini secara manual membuat objek baru di mana semuanya ditukar?
Terima kasih
function swap(obj) {return new Map(Object.entries(x).map([k, v] => [v, k]))}
Jawaban:
Contoh disini FIDDLE jangan lupa nyalakan console anda untuk melihat hasilnya.
Versi ES6 :
Atau menggunakan Array.reduce () & Object.keys ()
Atau menggunakan Array.reduce () & Object.entries ()
sumber
Anda bisa menggunakan fungsi lodash _.invert juga bisa menggunakan multivlaue
sumber
Menggunakan ES6:
sumber
Dapatkan kunci objek, lalu gunakan fungsi Reduksi Array untuk melewati setiap kunci dan menetapkan nilai sebagai kunci, dan kunci sebagai nilainya.
sumber
Di ES6 / ES2015 Anda dapat menggabungkan penggunaan Object.keys dan mengurangi dengan fungsi Object.assign baru , fungsi panah , dan nama properti yang dihitung untuk solusi pernyataan tunggal yang cukup mudah.
Jika Anda transpiling menggunakan operator penyebaran objek (tahap 3 saat menulis ini) itu akan menyederhanakan banyak hal.
Terakhir, jika Anda memiliki Object.entries yang tersedia (tahap 4 saat penulisan), Anda dapat membersihkan logika lebih banyak sentuhan (IMO).
sumber
Sekarang kita memiliki Object.fromEntries:
atau
sumber
Sebagai pelengkap dari jawaban @joslarson dan @jPO:
Tanpa perlu ES6, Anda dapat menggunakan dan Operator Koma :
Object.keys
Array.reduce
Beberapa mungkin menganggapnya jelek, tetapi "agak" lebih cepat karena
reduce
tidak menyebarkan semua propertiobj
di setiap loop.sumber
forEach
,map
ataureduce
. Tanggapan ini saya buat agar memiliki solusi satu baris tanpa perlu es6 dan tetap relevan dalam hal kecepatan / efektivitas.Mencoba
Tampilkan cuplikan kode
sumber
Yang terpendek yang saya buat dengan menggunakan ES6 ..
sumber
Menggunakan Ramda :
sumber
Saya percaya lebih baik melakukan tugas ini dengan menggunakan modul npm, seperti
invert-kv
.invert-kv : Balikkan kunci / nilai objek. Contoh: {foo: 'bar'} → {bar: 'foo'}
https://www.npmjs.com/package/invert-kv
sumber
Dengan Ramda murni dalam gaya murni dan tanpa poin:
Atau, dengan versi ES6 yang sedikit lebih berbelit-belit, masih berfungsi murni:
sumber
sumber
object
asalnyamap
seharusnya dilakukan, Anda menggunakannya di sini sepertiforEach
Berikut adalah implementasi fungsional murni dari flipping
keys
danvalues
di ES6:TypeScript
JavaScript
sumber
Ini bisa membuat objek Anda,,
{A : 1, B : 2, C : 3, D : 4}
seperti array, jadi Anda bisa memilikinyasumber
Berikut adalah opsi yang akan menukar kunci dengan nilai tetapi tidak kehilangan duplikat, jika objek Anda adalah: {a: 1, b: 2, c: 2}, itu akan selalu mengembalikan larik di keluaran:
sumber