2017-05-29 148 views
0

在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孔潘,它预计这个由类方法一起使用,并且有望在箭头函数返回值。

回答

1

当您不关心返回值时,您不需要使用.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; 
+0

感谢那些工作,但我仍然得到一个错误,指出'getUrlParams( queryString)'预计这一点。我在'getSearchResults()'里面调用这个方法为'const {terms,category} = this.getUrlParams(this.props.location.search);' –

+0

不客气。至于新错误,我宁愿为此提出一个新问题 - 它似乎更多的是关于你的组件的结构,然后关于使用的算法。 – raina77ow

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); 
}, {});