【问题标题】:Angular2 filtering array of objects based on an array of objects using pipeAngular2使用管道基于对象数组过滤对象数组
【发布时间】:2017-06-21 01:57:38
【问题描述】:

我正在努力弄清楚如何使用角管根据另一个对象数组过滤一组对象。到目前为止,我所拥有的是一个基于单个参数进行过滤的管道。

我有 2 个数组,array1 和数组 2,它们都包含复杂的对象。过滤后的数组 (array1) 应该只包含 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);
  }
}

【问题讨论】:

  • 过滤后的数组 (array1) 应该只包含 array1.value === array2.value 的对象 - 比较同一索引处的对象?还是 array1 应该只包含在数组 2 中的对象?
  • array1 应该只包含 array2 中的对象。应该在 array1[i].value === array2[i].value 上进行比较

标签: arrays angular typescript lambda filter


【解决方案1】:

如果数组 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);

【讨论】:

  • 选项一有效,但我的阵列已失去其顺序。有没有办法过滤和保持array1的顺序?
  • 所以我犯了一个错误,数组(array1)保持正确的顺序。我现在的问题是我需要 array1 的顺序是 array2 的顺序
  • +1 几乎正是我想要的,但恰恰相反。我需要过滤一个数组并取出不在第二个数组中的所有项目。该代码是: return array.filter(item => !filterFrom.some(f => f.value == item.value));
猜你喜欢
  • 2017-03-25
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 2019-04-29
  • 2021-08-22
  • 1970-01-01
  • 2021-01-27
相关资源
最近更新 更多