提取URL查询字符串ES6

时间:2017-05-29 12:50:46

标签: 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[key] = decodeURIComponent(val);
    });

    return params;
  }

然而,ESLint认为它期望它被类方法使用,并且它期望箭头函数中的返回值。

2 个答案:

答案 0 :(得分:2)

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

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

请参阅,.map函数通常需要返回一个新集合(其中每个项目代表与原始集合项目的某种关系)。

事实上,您可以使用.reduce()

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

答案 1 :(得分:0)

它抱怨因为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);
}, {});