Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分析另一个对象中字符串的值_Javascript_Typescript - Fatal编程技术网

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()调用中的“当前”参数。禁止使用非箭头函数(仅箭头函数)