2016-08-02 10 views
0

Immutable.js를 가장 효과적으로 사용하는 방법을 고려 중입니다. 나는이 같은 일부 코드를 보았다 :remove 및 findIndex 또는 filter를 사용하여 immutable.js 목록에서 항목과 항목을 제거해야합니까?

state.update('something', something => 
something.delete(
    something.findIndex(x => x.id === 1) 
) 
) 

을 그리고이 코드는 필터를 사용하여 많은 청소기를 기록 할 수 있었던 것처럼 그것은 나에게 보인다

propEq = k => v => x => x[k] === v 
state.update('something', propEq('x', 1)) 
:

state.update('something', something => 
something.filter(x => x.id !== 1) 
) 

그것은 분기점이없는 수를

여기에 중요한 성능상의 절충점이 있습니까?

delete + findIndex이 실제로 더 뛰어난 경우이 코드를 작성하는 데있어 깨끗하고 포인트가없는 방법이 있습니까?

답변

0

필터 접근 방식을 좋아합니다.

state.update('something', something => 
    something.filterNot(x => x.id === 1) 
) 

만 반환 한 우려가 필터링 당신이 상관없이, 전체 목록을 반복하지해야한다는 것을 의미한다는 것입니다 : 그 무엇보다 단지 개인적인 취향 비록 나는 filterNot()을 사용하는 술어를 조정할 수 있습니다. 작은 목록의 경우 큰 문제는 아니지만 큰 목록의 경우 성능 저하가 눈에 띄게 될 수 있습니다.

예를 들어, 10,000 개의 항목 목록에서 findIndex()은 10,000 회 반복하지 않지만 filter()은 항상 10,000 회 반복합니다.

filter()이 응용 프로그램 데이터에 맞지 않는 경우 클리너 코드로 바꾸어서 findIndex()delete()으로 전환합니다.

1

Adam이 말했듯이 findIndex은 전체 목록을 반복하지는 않지만 목록 대신 Map을 사용하여 id을 키로 사용하는 것이 좋습니다. 그러면 O (1)의 시간 복잡성이 있으며 항목을 삭제하면 훨씬 더 명확하고 읽기 쉽습니다.