Javascript 分析另一个对象中字符串的值
我有一些像这样的绳子Javascript 分析另一个对象中字符串的值,javascript,typescript,Javascript,Typescript,我有一些像这样的绳子 const resultComing ='access_token=test&token_type=bearer&state=state&expires_in=43199&scope=test'; const result: any = { access_token: test, token_type: bearer, state: state, expires_in: 43199, scope: test }; c
const resultComing ='access_token=test&token_type=bearer&state=state&expires_in=43199&scope=test';
const result: any = {
access_token: test,
token_type: bearer,
state: state,
expires_in: 43199,
scope: test
};
const result: any = resultComing.split('&').reduce(function (result: any, item: string) {
const parts = item.split('=');
result[parts[0]] = parts[1];
}, {});
我需要传递给如下所示的对象
const resultComing ='access_token=test&token_type=bearer&state=state&expires_in=43199&scope=test';
const result: any = {
access_token: test,
token_type: bearer,
state: state,
expires_in: 43199,
scope: test
};
const result: any = resultComing.split('&').reduce(function (result: any, item: string) {
const parts = item.split('=');
result[parts[0]] = parts[1];
}, {});
我试过这样做
const resultComing ='access_token=test&token_type=bearer&state=state&expires_in=43199&scope=test';
const result: any = {
access_token: test,
token_type: bearer,
state: state,
expires_in: 43199,
scope: test
};
const result: any = resultComing.split('&').reduce(function (result: any, item: string) {
const parts = item.split('=');
result[parts[0]] = parts[1];
}, {});
但是我得到了一个错误,TypeError:无法设置未定义的属性“token\u type”在下一行中调用的结果数组从未初始化,因此
result[parts[0]] = parts[1];
请尝试以下操作:
const result: any = {};
resultComing.split('&').reduce(function (result: any, item: string) {
const parts = item.split('=');
result[parts[0]] = parts[1];
}, {});
.reduce()
的回调应返回内容
const [k,v] = item.split("=");
result[k] = v;
return result;
这就是为什么只在第二个键上出现错误。对于第一个键,它将您的{}
的“初始”值传递到函数中,并正常工作,但由于函数不返回任何内容,因此第二个调用具有未定义的,并且您无法对其设置属性。您的函数无法工作,因为正如Niet所说,您不会从函数返回任何内容,因此下次它对其进行迭代时,result
将是未定义的
要解决此问题,只需在末尾返回结果:
const result: any = resultComing.split('&').reduce(function (result: any, item: string) {
const parts = item.split('=');
result[parts[0]] = parts[1];
return result;
}, {});
如果您不想使用箭头功能,也可以使用简单的循环检查您的配对:
let obj: any = {};
let pairs = resultComing.split('&');
for (let pair of pairs) {
let parts = pair.split('=');
obj[parts[0]] = parts[1];
}
它的可读性更强,并且完全符合您的要求。这是一个很好的解决方案,您可以写一个答案吗?result
是reduce()调用中的“当前”参数。禁止使用非箭头函数(仅箭头函数)