在不知道JavaScript对象的键的情况下,我如何将…

var obj = {
   param1: 'something',
   param2: 'somethingelse',
   param3: 'another'
}

obj[param4] = 'yetanother';

…到…

var str = 'param1=something&param2=somethingelse&param3=another&param4=yetanother';

...?


当前回答

var str = '';

for( var name in obj ) {
    str += (name + '=' + obj[name] + '&');
}

str = str.slice(0,-1);

试试吧。

例如:http://jsfiddle.net/T2UWT/

其他回答

你可以使用npm lib query-string

const queryString = require('query-string');

querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
// Returns 'foo=bar&baz=qux&baz=quux&corge='

你可以使用jQuery的param方法:

var obj = { 参数1:“某物”, param2: 'somethingelse', 参数3:“另一个” } obj['param4'] = 'yetother'; var str = jQuery.param(obj); 警报; <script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js”></script>

一个优雅的例子:(假设你正在运行一个现代的浏览器或节点)

var str = Object.keys(obj).map(function(key) {
  return key + '=' + obj[key];
}).join('&');

以及ES2017的等效版本:(感谢Lukas)

let str = Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&');

注意:如果键/值不是URL编码的,则可能需要使用encodeURIComponent()。

如果你使用jQuery,这是它用来参数化GET XHR请求的选项:

$.param( obj )

http://api.jquery.com/jQuery.param/

var str = '';

for( var name in obj ) {
    str += (name + '=' + obj[name] + '&');
}

str = str.slice(0,-1);

试试吧。

例如:http://jsfiddle.net/T2UWT/