2017-01-13 1 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

주를 마지막으로 object spread operator)를 사용하여 나에게 발생한 새로운 해답을 게시하려면이 질문을 다시 방문하고있어,이 특히입니다 : TRUE ' 규칙에. 기본적으로이 문제에 대해 불평하지 않습니다. 당신이 그 행동을 원하지 않는다면, 그것은 '거짓'으로 설정하는 것 같습니다. 또는'// eslint-disable-line no-param-reassign'으로 플래그를 지정하십시오. – loganfsmyth

+0

좋은 점은 @loganfsmyth입니다. 나는 "소품"을 사실로 설정하면 우리가 원하는 것을 볼 수있는 재검토를 할 것입니다 ... – sfletche

답변

7

내가 ...

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