我有一个根据另一个数组中包含的对象过滤数组的管道。如何根据我用来过滤(array2)的数组的顺序对过滤后的数组(array1)进行排序?
filename
答案 0 :(得分:1)
您可以使用原生Array.prototype.sort()
method:
array.sort((a, b) => {
let fromValues = filterFrom.map(f => f.value);
return fromValues.indexOf(a.value) < fromValues.indexOf(b.value) ? -1 : 1;
});
在上面的代码段中,创建了fromValue
数组,以便我们可以使用.indexOf()
method来获取filterFrom
数组中基于给定值的项的索引。从那里开始,sort方法负责其余部分并根据array
属性重新排序value
数组中的项目,相对于filterFrom
数组中相应值的位置
您可以在.sort()
方法之后链接.filter()
方法逻辑;只记得返回结果。
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 => filterFrom.some(f => f.value === item.value))
.sort((a, b) => {
let fromValues = filterFrom.map(f => f.value);
return fromValues.indexOf(a.value) <
fromValues.indexOf(b.value) ? -1 : 1;
});
}
}