【发布时间】:2019-10-12 15:37:41
【问题描述】:
我有以下查询字符串:
student.name.firstname=Foo&student.name.lastname=Bar&student.address=My%20Street
如何转换成这样的嵌套对象:
{
student:{
name:{
firstname: "Foo",
lastname: "Bar"
},
address: "My Street"
}
}
我已经尝试了以下代码,但有问题:
function convertQueryToMap(query) {
var params = {};
var vars = query.split('&');
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=');
var subpairs;
if (pair[0].includes('.')) {
subpairs = pair[0].split('.');
var object = {};
subpairs.reduce(function(o, s, i) {
if (i === subpairs.length-1) {
return o[s] = decodeURIComponent(pair[1]);
} else {
return o[s] = {};
}
}, object);
}
}
return params;
}
你知道解决办法吗?
【问题讨论】:
-
我认为
address不应该是name对象的一部分? -
您需要将
reduce放到params上,而不是您为每个键值对再次创建的object上。然后只在新的子对象o[s] = {}不存在时创建它。 -
同时删除
if (pair[0].includes('.'))。您还想为非嵌套键创建值吗? -
@Bergi:这是一个错字,我编辑了我的问题。谢谢。
标签: javascript javascript-objects query-string