Tanpa mengetahui kunci JavaScript Object
, bagaimana saya bisa mengubah sesuatu seperti ...
var obj = {
param1: 'something',
param2: 'somethingelse',
param3: 'another'
}
obj[param4] = 'yetanother';
...ke...
var str = 'param1=something¶m2=somethingelse¶m3=another¶m4=yetanother';
...?
javascript
bobsoap
sumber
sumber
Jawaban:
Contoh: http://jsfiddle.net/WFPen/
sumber
{ a:[ 1, 2 ], b:{ c:3, d:[ 4, 5 ], e:{ x:[ 6 ], y:7, z:[ 8, 9 ] }, f:true, g:false, h:undefined }, i:[ 10, 11 ], j:true, k:false, l:[ undefined, 0 ], m:"cowboy hat?" };
Sepertinya @UnLoCo menyarankan pustaka NPM yang juga akan berfungsi, yang menarik metode param berfungsi dari jQuery menjadi standalone.Jika Anda menggunakan jQuery, inilah yang digunakan untuk parameterisasi opsi permintaan GET ajax:
http://api.jquery.com/jQuery.param/
sumber
Yang elegan: (dengan asumsi Anda menjalankan browser atau node modern)
Dan setara ES2017: (terima kasih kepada Lukas)
Catatan: Anda mungkin ingin menggunakan
encodeURIComponent()
jika kunci / nilai tidak dikodekan URL.sumber
+ encodeURIComponent(obj[key])
Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&')
=${encodeURIComponent(val)}
Bagaimana dengan ini? Ini adalah satu baris dan tidak ada dependensi:
Gunakan dengan builtin URL seperti:
[Sunting 4 April 2020]: sebagaimana disebutkan dalam komentar,
null
nilai akan ditafsirkan sebagai string'null'
. Jadi berhati-hatilah dengan nilai nol.sumber
const { URLSearchParams } = require("url");
sumber
ES6:
sumber
Untuk satu tingkat ...
jsFiddle .
Ada pembicaraan tentang fungsi rekursif untuk objek yang dalam sewenang-wenang ...
jsFiddle .
Ini tentu saja berarti bahwa konteks bersarang hilang dalam serialisasi.
Jika nilai bukan URL yang dikodekan untuk memulai, dan Anda bermaksud menggunakannya dalam URL, periksa JavaScript
encodeURIComponent()
.sumber
.hasOwnProperty(prop)
.sumber
Hanya untuk catatan dan jika Anda memiliki browser yang mendukung ES6, berikut adalah solusinya dengan
reduce
:Dan inilah cuplikannya dalam aksi!
sumber
Karena saya membuat masalah besar tentang fungsi rekursif, inilah versi saya sendiri.
http://jsfiddle.net/userdude/Kk3Lz/2/
sumber
[]
lebih disukai daripadanew Array()
(b) Anda dapat menggunakandelimiter = delimiter || '&';
untuk argumen default (dan Anda salah mengartikannya) (c) Iterating denganfor ( in )
iterate atas semua properti enumerable, termasuk hal-hal pada rantai prototipe (obj.hasOwnProperty()
membela terhadap ini) (D)typeof
dapat berbohong tentang hal-hal apa, misalnya beberapa angka dapatObject
jika dibangun denganNumber()
konstruktor (e)Array
memilikipush()
metode untuk menambahkan anggota (f) membandingkan dengantrue
berlebihan. Saya seorang bajingan nitpicky tetapi Anda ingin umpan balik! :)hasOwnProperty()
; d) itu benar dan benar; e) Saya tidak pernah terbiasa menggunakanpush()
ataupop()
metode; f)break
atau tidakbreak
, itu pertanyaannya. Terima kasih atas masukan terperinci Anda. :)Kode yang berguna ketika Anda memiliki array di kueri Anda:
sumber
Jika Anda menggunakan NodeJS 13.1 atau superior, Anda dapat menggunakan modul querystring asli untuk mengurai string kueri.
sumber
Coba ini.
Contoh: http://jsfiddle.net/T2UWT/
sumber
Anda dapat menggunakan
param
metode jQuery :sumber
tampaknya melakukan pekerjaan itu. Tidak perlu
encodeURIComponent
. Keluaranhello=world&foo=bar
sumber
Jika Anda memerlukan fungsi rekursif yang akan menghasilkan parameter URL yang tepat berdasarkan objek yang diberikan, coba salah satu Script Kopi saya.
atau JavaScript yang dikompilasi ...
Ini akan membangun string seperti:
sumber
Pendekatan fungsional.
sumber
sumber
metode ini menggunakan rekursi untuk turun ke hierarki objek dan menghasilkan params style rails yang menafsirkan rails sebagai hash yang disematkan. objToParams menghasilkan string kueri dengan amper tambahan dan pada akhirnya, dan objToQuery menghapus ampli final.
sumber
Anda bisa menggunakan npm lib query-string
sumber
sumber