2017-05-29 103 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); 
}, {});