Angular2排序对象数组,基于使用管道的另一个对象数组的顺序

时间:2017-02-04 19:00:37

标签: arrays sorting angular typescript pipe

我有一个根据另一个数组中包含的对象过滤数组的管道。如何根据我用来过滤(array2)的数组的顺序对过滤后的数组(array1)进行排序?

filename

1 个答案:

答案 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;
                });

  }
}