2017-02-03 111 views
1

我很努力让我的头在如何基于使用角管的另一个对象数组过滤对象数组。到目前为止,我所拥有的是一种基于单一参数进行过滤的管道。Angular2过滤基于使用管道的对象数组的对象数组

我有2个数组,array1和数组2,它们都包含复杂的对象。将过滤的阵列(数组1)应该只包含对象,其中array1.value === array2.value

到目前为止我的代码:

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

将过滤的阵列(ARR ay1)应该只包含对象,其中array1.value === array2.value - 比较同一索引处的对象?或array1应该只包含数组2中的对象? – tymeJV

+0

array1应该只包含array2中的对象。比较应该在array1 [i] .value === array2 [i] .value –

回答

5

如果阵列1应该只包含在阵列2对象:

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)保持正确的顺序。我现在的问题是我需要array1的顺序是array2的顺序 –

+0

+1几乎正是我想要的,但恰恰相反。我需要过滤一个数组,并提取不在第二个数组中的所有项目。该代码是:return array.filter(item =>!filterFrom.some(f => f.value == item.value)); – cmartin

相关问题