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

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

obj[param4] = 'yetanother';

…到…

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

...?


当前回答

一个有用的代码,当你有数组在你的查询:

var queryString = Object.keys(query).map(key => {
    if (query[key].constructor === Array) {
        var theArrSerialized = ''
        for (let singleArrIndex of query[key]) {
            theArrSerialized = theArrSerialized + key + '[]=' + singleArrIndex + '&'
        }
        return theArrSerialized
    }
    else {
        return key + '=' + query[key] + '&'
    }
}
).join('');
console.log('?' + queryString)

其他回答

你可以使用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()。

这个一行程序还处理嵌套对象和JSON。根据需要对它们进行字符串化:

let qs = Object.entries(obj).map(([k, v]) => `${k}=${encodeURIComponent(typeof (v) === "object" ? JSON.stringify(v) : v)}`).join('&')

const obj = { id: 1, name: 'Neel' }; 设 str = ''; str = Object.entries(obj).map(([key, val]) => '${key}=${val}').join('&'); console.log(str);

var str = "";
for (var key in obj) {
    if (str != "") {
        str += "&";
    }
    str += key + "=" + encodeURIComponent(obj[key]);
}

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