在不知道JavaScript对象的键的情况下,我如何将…
var obj = {
param1: 'something',
param2: 'somethingelse',
param3: 'another'
}
obj[param4] = 'yetanother';
…到…
var str = 'param1=something¶m2=somethingelse¶m3=another¶m4=yetanother';
...?
在不知道JavaScript对象的键的情况下,我如何将…
var obj = {
param1: 'something',
param2: 'somethingelse',
param3: 'another'
}
obj[param4] = 'yetanother';
…到…
var str = 'param1=something¶m2=somethingelse¶m3=another¶m4=yetanother';
...?
当前回答
我们还应该处理任何项的值是未定义的情况,该键不应该包含在序列化的字符串中。
const serialize = (obj) => {
return Object.entries(obj)
.filter(([, value]) => value)
.map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
.join('&');
}
其他回答
你可以使用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>
这个一行程序还处理嵌套对象和JSON。根据需要对它们进行字符串化:
let qs = Object.entries(obj).map(([k, v]) => `${k}=${encodeURIComponent(typeof (v) === "object" ? JSON.stringify(v) : v)}`).join('&')
在一层深处…
var serialiseObject = function(obj) {
var pairs = [];
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) {
continue;
}
pairs.push(prop + '=' + obj[prop]);
}
return pairs.join('&');
}
jsFiddle。
有关于任意深度对象的递归函数的讨论……
var serialiseObject = function(obj) {
var pairs = [];
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) {
continue;
}
if (Object.prototype.toString.call(obj[prop]) == '[object Object]') {
pairs.push(serialiseObject(obj[prop]));
continue;
}
pairs.push(prop + '=' + obj[prop]);
}
return pairs.join('&');
}
jsFiddle。
这当然意味着在序列化中丢失了嵌套上下文。
如果这些值不是一开始就编码的URL,并且您打算在URL中使用它们,请检查JavaScript的encodeURIComponent()。
Object.toparams = function ObjecttoParams(obj)
{
var p = [];
for (var key in obj)
{
p.push(key + '=' + encodeURIComponent(obj[key]));
}
return p.join('&');
};
var str = '';
for( var name in obj ) {
str += (name + '=' + obj[name] + '&');
}
str = str.slice(0,-1);
试试吧。
例如:http://jsfiddle.net/T2UWT/