Equivalente em Javascript de jQuery.parametro()

JQuery.o param () pega numa matriz de pares de valores-chave, e transforma-a numa cadeia que pode usar como uma cadeia de consultas nos pedidos HTML. Por exemplo,

a = {
      userid:1,
      gender:male
    }

seria convertido em

userid=1&gender=male
Estou a tentar ligar para APIs externas do lado do servidor num script do Google Apps, que precisa de cadeias de consulta longas. Eu usaria a função jQuery param, mas parece não haver nenhuma maneira fácil de usar jQuery no lado do servidor no Google.

podes dar-me uma explicação simples? código javascript que alcança a mesma funcionalidade?

a implementação do jQuery é Aqui, mas eu não quero correr o risco de saltar sobre quaisquer detalhes cruciais simplesmente copiando-o e rasgando o código que lida com 'tradicional'.

Author: Neil, 2014-08-10

4 answers

Você também pode fazer isso com JavaScript puro, mas você tem que escrever mais linhas de código. Tenta isto.

Código HTML para testes:

<p id="test"></p>
JavaScript a ser disparado onload:
a = {
      userid:1,
      gender: "male",
    }

url = Object.keys(a).map(function(k) {
    return encodeURIComponent(k) + '=' + encodeURIComponent(a[k])
}).join('&')

document.getElementById("test").innerHTML=url

A saída é esta:

userid=1&gender=male
Podes experimentar isto. JSFIDDLE.NET, funciona, aqui está o link: http://jsfiddle.net/ert93wbp/
 21
Author: Amaynut, 2014-08-10 02:36:30
export function param( params ) {
    const p = new URLSearchParams;
    for( const [ key, value ] of Object.entries( params ) ) {
        p.set( key, String( value ) );
    }
    return p.toString();
}
 1
Author: error, 2018-01-18 17:38:18
A resposta do@Amaynut é fantástica. Mas eu faço algumas simplificações:
const obj = {
  userid: 1,
  gender: 'male'
}

const params = Object.keys(obj).map((k) => encodeURIComponent(k) + '=' + encodeURIComponent(obj[k])).join('&')

Ou talvez modulá-lo usando o módulo es6:

Util.js

export default {
  params (obj) {
    return Object.keys(obj).map((k) => encodeURIComponent(k) + '=' + encodeURIComponent(obj[k])).join('&')
  }
}

E usar Assim:

import util from './util'

const q = {
  userid: 1,
  gender: 'male'
}

const query = util.params(q)

console.log(query)
 0
Author: csdxf, 2017-04-27 07:22:04
ES6 gives us some nice primitives:

    // Function that parses an object of string key/value params to build up
    // a string of url params
    // requires an object with no nested values
    export function parseUrlParams(urlParams) {
        const joinByEquals = (pair) => pair.join('=')
        const params = Object.entries(urlParams).map(joinByEquals).join('&')
        if (params) {
            return `?${params}`
        } else {
        return ''
        }
    }
Veja isto aqui em acção.: https://www.webpackbin.com/bins/-KnpOI6hb1AzTDpN3wS7
 0
Author: jmares93, 2017-06-29 20:00:55