Javascript 提取URL查询字符串ES6
在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[
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);
}, {});