gpt4 book ai didi

javascript - 从 Javascript 中的查询字符串创建嵌套对象

转载 作者:行者123 更新时间:2023-11-30 09:11:36 25 4
gpt4 key购买 nike

我有以下查询字符串:

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;
}

你知道解决办法吗?

最佳答案

您可以使用reduce 方法创建嵌套结构,使用split 方法首先根据& 将查询拆分为多个部分,还可以得到每个部分的键和值。

const query = 'student.name.firstname=Foo&student.name.lastname=Bar&student.address=My%20Street'

const toObject = string => {
return string.split('&').reduce((r, s) => {
const [key, val] = s.split('=');

key.split('.').reduce((a, e, i, ar) => {
return a[e] || (a[e] = (ar[i + 1] ? {} : val.replace(/%20/g, ' ')))
}, r);

return r;
}, {})
}

const result = toObject(query);
console.log(result)

关于javascript - 从 Javascript 中的查询字符串创建嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58355738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com