web-dev-qa-db-ja.com

Array.prototype.reduce()関数でeslint no-param-reassignルールを処理する方法

最近、eslintルールを追加しました no-param-reassign

ただし、 reduce を使用してオブジェクト(initialValueとして空のオブジェクト)を構築すると、accumulatorを変更する必要があります(最初にコールバック関数の引数)コールバックの繰り返しごとにno-param-reassignリンターの苦情(予想どおり)。

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

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

または、reduceコールバック関数でその行のリンティングルールを無効にするだけですか?

32
sfletche

object spread operator )...を使用して最終的に発生した新しい回答を投稿するために、この質問を再訪しています。

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

まあ、あなたは_(result, item) => Object.assign({}, result, {[item]: whatever})_を実行してすべての反復で新しいオブジェクトを作成することができます:-)

リンターをだます場合は、=> Object.assign(result, {[item]: whatever})(これは現在のコードと同じですが、明示的な割り当てはありません)を使用できますが、そうです、その規則を無効にするだけでよいと思います。

9
Bergi

Lintルールのdisableブロックにreduce関数をラップするだけです。つまり、

/* eslint-disable no-param-reassign */
const newObject = ['a', 'b', 'c'].reduce((result, item, index) => {
  result[item] = index;
  return result;
}, {});
/* eslint-enable no-param-reassign */
0
Zack Knopp