提取URL查询字符串ES6
问题描述:
在ES6中提取查询字符串的正确方法是什么?提取URL查询字符串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()
简化此:
const params = hashes.reduce((params, hash) => {
const [key, val] = hash.split('=');
params[key] = decodeURIComponent(val);
return params;
}, {});
return params;
答
它抱怨,因为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);
}, {});
感谢那些工作,但我仍然得到一个错误,指出'getUrlParams( queryString)'预计这一点。我在'getSearchResults()'里面调用这个方法为'const {terms,category} = this.getUrlParams(this.props.location.search);' –
不客气。至于新错误,我宁愿为此提出一个新问题 - 它似乎更多的是关于你的组件的结构,然后关于使用的算法。 – raina77ow