Object
Wie kann ich etwas drehen, ohne die Schlüssel eines JavaScript zu kennen ...
var obj = {
param1: 'something',
param2: 'somethingelse',
param3: 'another'
}
obj[param4] = 'yetanother';
...in...
var str = 'param1=something¶m2=somethingelse¶m3=another¶m4=yetanother';
...?
javascript
Bobsoap
quelle
quelle
Antworten:
Beispiel: http://jsfiddle.net/WFPen/
quelle
{ 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?" };
erfüllt. Es sieht so aus, als ob @UnLoCo eine NPM-Bibliothek vorgeschlagen hat, die ebenfalls funktioniert und die funktionierende param-Methode aus jQuery herausholt, um eigenständig zu sein.Wenn Sie jQuery verwenden, wird dies zur Parametrisierung der Optionen einer GET-Ajax-Anforderung verwendet:
http://api.jquery.com/jQuery.param/
quelle
Eine elegante: (vorausgesetzt, Sie verwenden einen modernen Browser oder Knoten)
Und das ES2017-Äquivalent: (danke an Lukas)
Hinweis: Sie möchten wahrscheinlich verwenden,
encodeURIComponent()
wenn die Schlüssel / Werte nicht URL-codiert sind.quelle
+ encodeURIComponent(obj[key])
Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&')
=${encodeURIComponent(val)}
Wie wäre es damit? Es ist eine Zeile und keine Abhängigkeiten:
Verwenden Sie es mit der eingebauten URL wie folgt:
[Bearbeiten 4. April 2020]: Wie in den Kommentaren erwähnt, werden
null
Werte als Zeichenfolge interpretiert'null'
. Seien Sie also vorsichtig mit Nullwerten.quelle
const { URLSearchParams } = require("url");
quelle
ES6:
quelle
Für eine Ebene tief ...
jsFiddle .
Es wurde über eine rekursive Funktion für beliebig tiefe Objekte gesprochen ...
jsFiddle .
Dies bedeutet natürlich, dass der Verschachtelungskontext bei der Serialisierung verloren geht.
Wenn die Werte zunächst nicht URL-codiert sind und Sie sie in einer URL verwenden möchten, lesen Sie die JavaScript-Werte
encodeURIComponent()
.quelle
.hasOwnProperty(prop)
.quelle
Nur zur Veranschaulichung und falls Sie einen Browser haben, der ES6 unterstützt, finden Sie hier eine Lösung mit
reduce
:Und hier ist ein Ausschnitt in Aktion!
quelle
Da ich so viel über eine rekursive Funktion gemacht habe, ist hier meine eigene Version.
http://jsfiddle.net/userdude/Kk3Lz/2/
quelle
[]
gegenübernew Array()
(b) bevorzugt. Sie könnendelimiter = delimiter || '&';
für das Argument Standard verwenden (und Sie haben es falsch geschrieben). (C) Durch Iterieren mitfor ( in )
werden alle aufzählbaren Eigenschaften durchlaufen , einschließlich der Dinge in der Prototypenkette (obj.hasOwnProperty()
verteidigt sich dagegen). (d)typeof
kann darüber lügen, was Dinge sind, z. B. können einige Zahlen sein,Object
wenn sie mit demNumber()
Konstruktor konstruiert wurden. (e)Array
haben einepush()
Methode zum Hinzufügen von Elementen (f), die mittrue
redundant verglichen werden. Ich bin ein pingeliger Bastard, aber du wolltest Feedback! :)hasOwnProperty()
. d) das ist sicherlich wahr und ein guter Punkt; e) Ich habe noch nie Gebrauch zu verwenden bekommenpush()
oderpop()
Verfahren; f)break
oder nichtbreak
, das ist die Frage. Vielen Dank für Ihre ausführliche Eingabe. :)Ein nützlicher Code, wenn Sie das Array in Ihrer Abfrage haben:
quelle
Wenn Sie NodeJS 13.1 oder höher verwenden, können Sie das native Querystring-Modul verwenden, um Abfragezeichenfolgen zu analysieren.
quelle
Probieren Sie es aus.
Beispiel: http://jsfiddle.net/T2UWT/
quelle
Sie können die
param
Methode von jQuery verwenden:quelle
scheint den Job zu machen. Keine Notwendigkeit für
encodeURIComponent
. Ausgängehello=world&foo=bar
quelle
Wenn Sie eine rekursive Funktion benötigen, die basierend auf dem angegebenen Objekt die richtigen URL-Parameter erzeugt, versuchen Sie es mit meinem Coffee-Script.
oder das JavaScript kompiliert ...
Dadurch werden Zeichenfolgen wie folgt erstellt:
quelle
Ein funktionaler Ansatz.
quelle
quelle
Diese Methode verwendet die Rekursion, um in die Objekthierarchie abzusteigen und Parameter im Rails-Stil zu generieren, die Rails als eingebettete Hashes interpretieren. objToParams generiert eine Abfragezeichenfolge mit einem zusätzlichen kaufmännischen Und am Ende, und objToQuery entfernt das endgültige kaufmännische Und.
quelle
Sie könnten npm lib verwenden query-string
quelle
quelle