Bagaimana satu JSON.stringify () menjadi Set ?
Hal-hal yang tidak berfungsi di Chromium 43:
var s = new Set(['foo', 'bar']);
JSON.stringify(s); // -> "{}"
JSON.stringify(s.values()); // -> "{}"
JSON.stringify(s.keys()); // -> "{}"
Saya berharap untuk mendapatkan sesuatu yang mirip dengan array serial.
JSON.stringify(["foo", "bar"]); // -> "["foo","bar"]"
javascript
json
ecmascript-6
MitMaro
sumber
sumber
Jawaban:
JSON.stringify
tidak langsung bekerja dengan kumpulan karena data yang disimpan dalam kumpulan tidak disimpan sebagai properti.Tapi Anda bisa mengonversi set ke array. Kemudian Anda akan bisa merangkainya dengan benar.
Salah satu dari berikut ini akan membantu:
sumber
Array.from()
. Tapi ini terlihat lebih baik secara idiom.JSON.stringify([_ for (_ of s)])
Set.prototype.toJSON
: github.com/DavidBruant/Map-Set.prototype.toJSONGunakan
JSON.stringify
pengganti ini :(karena
toJSON
merupakan artefak lama, dan pendekatan yang lebih baik adalah menggunakan kustomreplacer
, lihat https://github.com/DavidBruant/Map-Set.prototype.toJSON/issues/16 )Kemudian:
Hasil:
sumber
JSON.stringify(fooBar, (key, value) => value instanceof Set ? [...value] : value)
Sementara semua pekerjaan di atas saya sarankan agar Anda mengatur subclass dan menambahkan
toJSON
metode untuk memastikan bahwa itu merangkai dengan benar. Apalagi jika Anda akan sering merangkai. Saya menggunakan set di toko Redux saya dan perlu memastikan ini tidak pernah menjadi masalah.Ini adalah implementasi dasar. Penamaan hanya untuk menggambarkan titik pilih gaya Anda sendiri.
sumber
toJSON
dianggap sebagai fitur lama. Proposal untuk ditambahkantoJSON
ke keduanyaset
danmap
ditolak: github.com/DavidBruant/Map-Set.prototype.toJSON/issues/16constructor
tidak perlu.