最近、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
コールバック関数でその行のリンティングルールを無効にするだけですか?
object spread operator )...を使用して最終的に発生した新しい回答を投稿するために、この質問を再訪しています。
const newObject = ['a', 'b', 'c'].reduce((result, item, index) => ({
...result,
[item]: index,
}), {});
まあ、あなたは_(result, item) => Object.assign({}, result, {[item]: whatever})
_を実行してすべての反復で新しいオブジェクトを作成することができます:-)
リンターをだます場合は、=> Object.assign(result, {[item]: whatever})
(これは現在のコードと同じですが、明示的な割り当てはありません)を使用できますが、そうです、その規則を無効にするだけでよいと思います。
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 */