Javascript 提取URL查询字符串ES6

Javascript 提取URL查询字符串ES6,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,在ES6中提取查询字符串的正确方法是什么 我编写了这个函数: getUrlParams(queryString) { const hashes = queryString.slice(queryString.indexOf('?') + 1).split('&'); const params = {}; hashes.map((hash) => { const [key, val] = hash.split('='); params[

在ES6中提取查询字符串的正确方法是什么

我编写了这个函数:

getUrlParams(queryString) {
    const hashes = queryString.slice(queryString.indexOf('?') + 1).split('&');
    const params = {};
    hashes.map((hash) => {
      const [key, val] = hash.split('=');
      params[key] = decodeURIComponent(val);
    });

    return params;
  }

然而,ESLint认为它希望类方法使用它,并且它希望箭头函数中有一个返回值。

当你不关心返回值时,你不需要使用
.map
;改用
.forEach

hashes.forEach(hash => {
  const [key, val] = hash.split('=');
  params[key] = decodeURIComponent(val);
});
请参阅,
.map
函数通常需要返回一个新集合(其中每个项表示与原始集合中的项的某种关系)

事实上,您可以使用
.reduce()
简化此过程:


它抱怨是因为
map
应该将函数参数映射到其返回值,而不仅仅是迭代

可以将其更改为简单循环:

const params = {};
for (const hash of hashes) {
  const [key, val] = hash.split('=');
  params[key] = decodeURIComponent(val);
}
或者可以将数组简化为对象:

return hashes.reduce((params, hash) => {
  const [key, val] = hash.split('=');
  params[key] = decodeURIComponent(val);
}, {});

感谢您的帮助,但我仍然收到一个错误,指出
geturlparms(queryString)
预期会出现这种情况。我在我的
getSearchResults()
中调用这个方法,作为
const{terms,category}=this.geturlparms(this.props.location.search)不客气。至于新的错误,我宁愿对此提出一个新的问题——似乎更多的是关于组件的结构,而不是关于所使用的算法。
return hashes.reduce((params, hash) => {
  const [key, val] = hash.split('=');
  params[key] = decodeURIComponent(val);
}, {});