2017-11-07 6 views
0

내 프로젝트 중 하나에서 미리 입력 방법을 사용하고 있으며 이미 선택된 것으로 표시되고 결과가 내 selectedUsers 배열에 표시되지 않도록하려고합니다.객체 배열에 이미 존재하는 데이터를 생략하는 lodash 필터

this.userSearchSub = this.typeahead 
     .distinctUntilChanged() 
     .debounceTime(200) 
     .switchMap(term => this._reqService.loadEmployees(term)) 
     .subscribe((emp: any) => { 
     this.users = emp.result.employees.filter(item => !this.selectedUsers.includes(item.QID)); 
     }, (err) => { 
     this.users = []; 
     }); 

selectedUsers 배열과 같이 데이터의 객체를 보유하고있는 다음

this.selectedUsers.push({ 
     FirstName: $event.FirstName, 
     LastName: $event.LastName, 
     NTID: $event.NTID, 
     CenterName: $event.CenterName, 
     Email: $event.Email, 
     QID: $event.QID 
    }) 
여기

내 목표는 item.QIDselectedUsers 배열의 모든 항목과 일치하는 경우라고 할 수있는 우아한 lodash 방법이 있는지 확인하는 것입니다 포함시키지 마십시오.

item.QID은 고유해야하며 내 selectedUsers 배열에 두 번 이상 존재해서는 안됩니다.

filter 대신, 이것에 대한 lodash 접근 방식은 무엇입니까?

답변

0

어때 대략 differenceBy?

다른 지정된 배열에 포함되지 않은 배열 값의 배열을 만듭니다

this.users = _.differenceBy(emp.result.employees, this.selectedUsers, 'QID') 

differenceBy과 같이 설명되어 있습니다 difference의 변형입니다 : 귀하의 예제를 사용하여, 나는이 같이 보일 것 같아 ...

첫 번째 매개 변수는 소스 배열이고 두 번째 매개 변수는 제외에 사용할 배열이며 마지막 매개 변수는 제외에 사용할 속성입니다.