在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认为它期望它被类方法使用,并且它期望箭头函数中的返回值。
答案 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);
}, {});