Angular 角度2管道检查数组中是否已存在值

Angular 角度2管道检查数组中是否已存在值,angular,Angular,我在angular 2中制作了这个管道,它根据一些条件过滤数组: import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'filter', pure: false }) export class FilterPipe implements PipeTransform { transform(value: any, args?: any): any { if(value.length === n

我在angular 2中制作了这个管道,它根据一些条件过滤数组:

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

@Pipe({
  name: 'filter',
  pure: false
})
export class FilterPipe implements PipeTransform {

  transform(value: any, args?: any): any {
    if(value.length === null){
        return value;
    }

    let resultArray = [];
    for(let item of value)
    {
        if(item.match('^.*'+args[0]+'.*$'))
        {
            resultArray.push(item);
        }
    }
    return resultArray;
  }

}
这里是html页面,我使用过滤器仅显示以字母e开头的值:

<input type="text" [(ngModel)]="val">
<hr>
<button type="button" class="btn btn-primary" (click)="onClick(val)">Add Item</button>
<hr>
<h1>
  <li *ngFor="let item of values | filter: 'e'">{{item}}</li>
</h1>
我想向过滤器添加一个条件,以查看数组中是否存在一个现有值,即使它以字母e开头,也不要将其添加到数组中

我在onClick()方法中尝试了以下操作,但没有成功,也没有显示任何错误:

onClick(val)
  {
    if(val==null)
    {
        return null;
    }
    else{
        if(val==this.values.indexOf(this.values))
        {
            return null;
        }
        else
        {
            this.values.push(val);
        }
    }
因此,我在管道中添加了以下内容:

   if(item.match(args[0]))
    {
        return null;
    }

但仍然没有出现错误。

在管道中,您可以过滤阵列中的唯一元素并删除重复元素:

let uniqueArray = value.filter(function (el, index, array) { 
    return array.indexOf (el) == index;
});
然后,您可以捕获以下以特定字符串开头的元素:

for (let item of uniqueArray) {
    if (item.match("^"+args[0])) {
        resultArray.push(item);
    }
}
我创建了一个工作示例:


您可以查看真实数据和过滤后的数据。

在管道中,您可以过滤阵列中的唯一元素并删除重复项:

let uniqueArray = value.filter(function (el, index, array) { 
    return array.indexOf (el) == index;
});
然后,您可以捕获以下以特定字符串开头的元素:

for (let item of uniqueArray) {
    if (item.match("^"+args[0])) {
        resultArray.push(item);
    }
}
我创建了一个工作示例:


您可以查看真实数据和过滤后的数据。

如果我理解正确,您是否希望避免将现有元素推入值数组?您可以执行以下操作:
onClick(val){if(this.values.indexOf(val)==-1){this.values.push(val);}}
是的,但我需要在管道脚本中而不是在函数中执行此操作如果我正确理解您的意思,您希望避免将现有元素推入值数组吗?您可以执行以下操作:
onClick(val){if(this.values.indexOf(val)==-1){this.values.push(val);}}
是的,但我需要在管道脚本中执行,而不是在函数中执行。谢谢,先生,就这样。谢谢,先生