Не зная ключей JavaScript Object
, как я могу превратить что-то вроде ...
var obj = {
param1: 'something',
param2: 'somethingelse',
param3: 'another'
}
obj[param4] = 'yetanother';
...в...
var str = 'param1=something¶m2=somethingelse¶m3=another¶m4=yetanother';
...?
javascript
bobsoap
источник
источник
Ответы:
Пример: http://jsfiddle.net/WFPen/
источник
{ 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?" };
Похоже, @UnLoCo предложил библиотеку NPM, которая также будет работать, которая вытягивает функционирующий метод param из jQuery для автономности.Если вы используете jQuery, это то, что он использует для параметризации параметров запроса GET ajax:
http://api.jquery.com/jQuery.param/
источник
Элегантный: (при условии, что вы используете современный браузер или узел)
И эквивалент ES2017: (спасибо Лукасу)
Примечание: вы, вероятно, захотите использовать,
encodeURIComponent()
если ключи / значения не закодированы в URL.источник
+ encodeURIComponent(obj[key])
Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&')
=${encodeURIComponent(val)}
Как насчет этого? Это одна строка и никаких зависимостей:
Используйте его со встроенным URL следующим образом:
[Изменить 4 апреля 2020 года]: как указано в комментариях,
null
значения будут интерпретироваться как строка'null'
. Так что будьте осторожны с нулевыми значениями.источник
const { URLSearchParams } = require("url");
источник
ES6:
источник
Для одного уровня глубоко ...
jsFiddle .
Речь шла о рекурсивной функции для сколь угодно глубоких объектов ...
jsFiddle .
Это, конечно, означает, что контекст вложенности теряется при сериализации.
Если значения не являются URL-адресами для начала и вы собираетесь использовать их в URL-адресе, ознакомьтесь с JavaScript
encodeURIComponent()
.источник
.hasOwnProperty(prop)
.источник
Просто для справки, и если у вас есть браузер, поддерживающий ES6, вот решение с
reduce
:И вот фрагмент в действии!
источник
Так как я сделал так много о рекурсивной функции, вот моя собственная версия.
http://jsfiddle.net/userdude/Kk3Lz/2/
источник
[]
предпочтительнее, чемnew Array()
(б) Вы можете использоватьdelimiter = delimiter || '&';
для аргумента по умолчанию (и вы написали его неправильно) (в) Итерирование сfor ( in )
будет перебирать все перечисляемые свойства, включая вещи в цепочке прототипов (obj.hasOwnProperty()
защищает от этого) (d)typeof
может лгать о том, что есть, например, некоторые числа могут бытьObject
построены с помощьюNumber()
конструктора (e)Array
иметьpush()
метод для добавления членов (f) по сравнению сtrue
избыточным. Я придирчивый ублюдок, но вы хотели получить обратную связь! :)hasOwnProperty()
; г) это, безусловно, правда и хорошая мысль; д) я никогда не привык к использованиюpush()
илиpop()
методам; е)break
или нетbreak
, вот в чем вопрос. Спасибо за ваш подробный вклад. :)Полезный код, когда у вас есть массив в вашем запросе:
источник
Если вы используете NodeJS 13.1 или выше, вы можете использовать собственный модуль строки запроса для анализа строк запроса.
источник
Дайте этому шанс.
Пример: http://jsfiddle.net/T2UWT/
источник
Вы можете использовать
param
метод jQuery :источник
кажется, делает работу. Нет необходимости для
encodeURIComponent
. Выходыhello=world&foo=bar
источник
Если вам нужна рекурсивная функция, которая будет генерировать правильные параметры URL в зависимости от заданного объекта, попробуйте мой Coffee-Script.
или JavaScript скомпилирован ...
Это создаст строки примерно так:
источник
Функциональный подход.
источник
источник
этот метод использует рекурсию для спуска в иерархию объектов и генерирует параметры стиля rails, которые rails интерпретирует как встроенные хэши. objToParams генерирует строку запроса с дополнительным амперсандом в конце, а objToQuery удаляет последний амперсанд и.
источник
Вы можете использовать строку запроса npm lib
источник
источник