2017-02-03 1 views
1

각도 파이프를 사용하여 다른 객체 배열을 기반으로 객체 배열을 필터링하는 방법에 대해 고민하고 있습니다. 지금까지 필터가 하나의 인수를 기반으로하는 파이프가 있습니다.파이프를 사용하는 객체 배열을 기반으로 한 객체의 Angular2 필터링 배열

2 개의 배열 array1과 array2는 둘 다 복잡한 개체를 포함합니다.

import { Injectable, Pipe, PipeTransform } from '@angular/core'; 

@Pipe({ 
    name: 'arrayFilter' 
}) 
@Injectable() 
export class AttributeFilterPipe implements PipeTransform { 
    transform(array: any[], filterFrom: any[]): any { 
    return array.filter(item => item.value.indexOf(filterFrom[0].value) !== -1); 
    } 
} 
+0

여과 어레이 (도착 ay1)는 객체 만 포함해야합니다. array1.value === array2.value - 같은 인덱스에있는 객체를 비교합니까? 또는 array1은 배열 2에 포함 된 객체 만 가져야합니까? – tymeJV

+0

array1은 array2에있는 객체 만 포함해야합니다. 비교는 array1 [i] .value === array2 [i] .value에서 수행되어야합니다. –

답변

5

어레이 (1)은 단지 어레이 (2)에있는 물체를 포함한다 : 만약

array1.value는 ===

원경

내 코드를 array2.value 여기서 필터링 배열 (배열 1)의 오브젝트 만 포함해야

return array.filter(item => filterFrom.some(f => f.value == item.value)); 

어레이 (1)는 동일한 인덱스의 어레이 (2) 오브젝트에 포함되어야하는 경우 :

return array.filter((item, index) => item.value == filterFrom[index].value); 
+0

옵션 하나가 작동하지만 배열이 순서를 잃어 버렸습니다. 필터링하고 array1의 순서를 유지할 수있는 방법이 있습니까? –

+0

그래서 실수로 배열 (array1)이 올바른 순서로 유지됩니다. 내 문제는 지금 array2의 배열이 필요하다. –

+0

+1 정확히 내가 원하는 것이지만 그 반대. 배열을 필터링하고 두 번째 배열 안에 있지 않은 모든 항목을 꺼내야했습니다. 이 코드는 다음과 같습니다. return array.filter (item =>! filterFrom.some (f => f.value == item.value)); – cmartin

관련 문제