2017-01-13 6 views
9

最近、eslintルールno-param-reassignが追加されました。しかしArray.prototype.reduce()関数でeslint no-param-reassignルールを処理する方法

、私はno-param-reassignリンターの苦情の原因となる各コールバックの繰り返し、上の(最初のコールバック関数のargを)accumulator(などのオブジェクト(initialValueとして空のオブジェクト)、私は自分自身を修正する必要を見つけるを構築するためにreduceを使用誰かがそれを望むだろう)。

const newObject = ['a', 'b', 'c'].reduce((result, item, index) => { 
    result[item] = index; // <-- causes the no-param-reassign complaint 
    return result; 
}, {}); 

accumulator引数を変更しないreduceを持つオブジェクトを構築するためのより良い方法はありますか?

私のreduceコールバック関数で、その行のlintingルールを無効にするだけでいいですか?

+3

注この質問を再訪していますが、これは特にです:true'をルールに。デフォルトではこれについて不平を言っていません。あなたがその行動を望んでいない場合は、それを 'false'に設定するように思えるでしょうか?または、 '// eslint-disable-line no-param-reassign.'を付けてフラグを付けてください。 – loganfsmyth

+0

これは良い点です@loganfsmyth。私は、「小道具」を真実に設定することが本当に私たちが望んでいるものかどうかを見直すためにいくつかの再検討を行うでしょう... – sfletche

答えて

7

私が...)最後にobject spread operatorを使用して私に起こった新しい答えを投稿する

const newObject = ['a', 'b', 'c'].reduce((result, item, index) => ({ 
    ...result, 
    [item]: index, 
}), {}); 
+3

これは本当に良い解決策ですか?多くの要素を持つ配列を減らすと、2000としましょう。この場合、2000のように多くの新しいオブジェクトインスタンスが作成されます。 – Amida

4

さて、あなたはリンターをだますしたい場合は、あなたがあなたの現在のコードとしてではなく、明示的にせずに同じことを=> Object.assign(result, {[item]: whatever})を(使用することができ

:-)反復ごとに新しいオブジェクトを作成するために(result, item) => Object.assign({}, result, {[item]: whatever})を行うことができ割り当て)、しかしええ、あなたは単にそのルールを無効にする必要がありますね。あなたは `「小道具」を渡されたので

+1

ええ、それはちょっとわかりました。おそらくその行のルールを無効にするのが最良の選択です... – sfletche

関連する問題