2017-05-29 31 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が、これはクラスメソッドで使用されることを期待することをcompains、それが矢印関数の戻り値を期待しました。

答えて

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

感謝を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); 
} 

またはArrayオブジェクトに削減することができます働いていたが、私はまだ(その `getUrlParamsを示すエラーを取得しています

return hashes.reduce((params, hash) => { 
    const [key, val] = hash.split('='); 
    params[key] = decodeURIComponent(val); 
}, {}); 
関連する問題