The map
fungsi dalam underscore.js, jika disebut dengan benda javascript, mengembalikan sebuah array nilai dipetakan dari nilai-nilai objek.
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
apakah ada cara untuk membuatnya melestarikan kunci? yaitu, saya ingin fungsi yang mengembalikan
{one: 3, two: 6, three: 9}
javascript
underscore.js
lodash
xuanji
sumber
sumber
Jawaban:
Dengan Garis Bawah
Underscore menyediakan fungsi
_.mapObject
untuk memetakan nilai dan mempertahankan kunci.DEMO
Dengan Lodash
Lodash menyediakan fungsi
_.mapValues
untuk memetakan nilai dan mempertahankan kunci.DEMO
sumber
_.map()
kembali[['one', 3], ['two', 6], ['three', 9]]
, yang merupakan array array, dan_.object()
mengubahnya kembali menjadi objek.Saya berhasil menemukan fungsi yang diperlukan di lodash, sebuah perpustakaan utilitas yang mirip dengan garis bawah.
http://lodash.com/docs#mapValues
sumber
sumber
Saya tahu ini sudah tua, tetapi sekarang Underscore memiliki peta baru untuk objek:
Tentu saja Anda dapat membuat peta yang fleksibel untuk array dan objek
sumber
mapObject
; lihatmapValues
metode lodash sebagai gantinya.Bagaimana dengan versi ini di JS polos ( ES6 / ES2015 )?
jsbin
Jika Anda ingin memetakan objek secara rekursif (map nested obj), bisa dilakukan seperti ini:
jsbin
Karena ES7 / ES2016 Anda dapat menggunakan
Object.entries
daripadaObject.keys
seperti ini:sumber
Saya tahu ini sudah lama, tetapi masih solusi yang paling jelas melalui flip (alias mengurangi js) hilang, demi kelengkapan saya akan meninggalkannya di sini:
sumber
_.map mengembalikan Array, bukan Object.
Jika Anda menginginkan objek Anda lebih baik menggunakan fungsi yang berbeda, seperti
each
; jika Anda benar-benar ingin menggunakan peta, Anda bisa melakukan sesuatu seperti ini:tapi itu membingungkan, ketika melihat
map
seseorang akan mengharapkan untuk memiliki array sebagai hasilnya dan kemudian membuat sesuatu dengannya.sumber
map
digunakan untuk mengubah input yang menghasilkan array sebagai output, Anda dapat menulis_.object
dan_.map
sebagai @GG. menulis, tapi itu masalah selera pada saat ini.Saya pikir Anda ingin fungsi mapValues (untuk memetakan fungsi atas nilai-nilai objek), yang cukup mudah untuk diterapkan sendiri:
sumber
sumber
Perbaikan campuran untuk bug peta garis bawah : P
Solusi sederhana yang menjaga kunci kanan dan kembali sebagai objek. Masih digunakan dengan cara yang sama seperti tamu saya, Anda bisa menggunakan fungsi ini untuk mengganti fungsi _.map yang bermasalah.
atau sama seperti saya menggunakannya sebagai mixin
sumber
Anda dapat menggunakan
_.mapValues(users, function(o) { return o.age; });
dalam Lodash dan_.mapObject({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
dalam Garis Bawah.Lihat dokumentasi silang di sini: http://jonathanpchen.com/underdash-api/#mapvalues-object-iteratee-identity
sumber