Sem conhecer as chaves de um JavaScript Object
, como posso ativar algo como ...
var obj = {
param1: 'something',
param2: 'somethingelse',
param3: 'another'
}
obj[param4] = 'yetanother';
...para dentro...
var str = 'param1=something¶m2=somethingelse¶m3=another¶m4=yetanother';
...?
javascript
bobsoap
fonte
fonte
Respostas:
Exemplo: http://jsfiddle.net/WFPen/
fonte
{ 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?" };
Parece que o @UnLoCo sugeriu uma biblioteca NPM que também funcionará, o que puxa o método param de funcionamento do jQuery para ser autônomo.Se você usa jQuery, é isso que ele usa para parametrizar as opções de uma solicitação GET ajax:
http://api.jquery.com/jQuery.param/
fonte
Um elegante: (supondo que você esteja executando um navegador ou nó moderno)
E o equivalente ao ES2017: (graças a Lukas)
Nota: Você provavelmente deseja usar
encodeURIComponent()
se as chaves / valores não estiverem codificados em URL.fonte
+ encodeURIComponent(obj[key])
Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&')
=${encodeURIComponent(val)}
Que tal agora? É uma linha e sem dependências:
Use-o com o URL incorporado da seguinte maneira:
[Editar em 4 de abril de 2020]: conforme mencionado nos
null
valores dos comentários , será interpretado como uma sequência'null'
. Portanto, tenha cuidado com valores nulos.fonte
const { URLSearchParams } = require("url");
fonte
ES6:
fonte
Para um nível profundo ...
jsFiddle .
Falou-se sobre uma função recursiva para objetos arbitrariamente profundos ...
jsFiddle .
Obviamente, isso significa que o contexto de aninhamento é perdido na serialização.
Se os valores não forem codificados para URLs e você pretende usá-los em uma URL, consulte JavaScript
encodeURIComponent()
.fonte
.hasOwnProperty(prop)
.fonte
Apenas para o registro e caso você tenha um navegador compatível com ES6, aqui está uma solução com
reduce
:E aqui está um trecho em ação!
fonte
Desde que fiz uma grande coisa sobre uma função recursiva, aqui está minha própria versão.
http://jsfiddle.net/userdude/Kk3Lz/2/
fonte
[]
são preferidos anew Array()
(b) Você pode usardelimiter = delimiter || '&';
para o argumento padrão (e você o digitou errado) (c) Afor ( in )
iteração com iterará sobre todas as propriedades enumeráveis, incluindo itens na cadeia de protótipos (obj.hasOwnProperty()
defende isso) (d)typeof
pode mentir sobre o que são as coisas, por exemplo, alguns números podem serObject
se construídos com oNumber()
construtor (e)Array
tiverem umpush()
método para adicionar membros (f) em comparação com atrue
redundância. Eu sou um bastardo, mas você queria feedback! :)hasOwnProperty()
; d) isso certamente é verdade e um bom argumento; e) eu nunca tinha chegado uso de usarpush()
oupop()
métodos; f)break
ou nãobreak
, eis a questão. Obrigado por sua contribuição detalhada. :)Um código útil quando você tem a matriz em sua consulta:
fonte
Se você estiver usando o NodeJS 13.1 ou superior, poderá usar o módulo de querystring nativo para analisar as strings de consulta.
fonte
Dê uma chance a isso.
Exemplo: http://jsfiddle.net/T2UWT/
fonte
Você pode usar o
param
método do jQuery :fonte
parece fazer o trabalho. Não há necessidade
encodeURIComponent
. Saídashello=world&foo=bar
fonte
Se você precisar de uma função recursiva que produza parâmetros de URL adequados com base no objeto fornecido, experimente o meu Coffee-Script.
ou o JavaScript compilado ...
Isso construirá seqüências de caracteres como estas:
fonte
Uma abordagem funcional.
fonte
fonte
esse método usa recursão para descer para a hierarquia de objetos e gerar parâmetros de estilo de trilhos, que os interpretam como hashes incorporados. objToParams gera uma string de consulta com um e comercial extra no final, e objToQuery remove o e comercial final.
fonte
Você poderia usar npm lib query-string
fonte
fonte