2016-12-28 8 views
1

, возможно ли создать канал для фильтрации массива в соответствии с несколькими полями? но эти поля могут меняться, поэтому функция фильтрации должна включать все включенные поля.Возможно ли создать такую ​​трубу, как sql в

values.filter((value) => value[field] === args[0] || .... || value[field] === args[n]) 

Итак, как создается такая труба? Как обрабатывается ситуация с фильтром?

ответ

0

Создайте поисковую трубу для фильтра, как показано ниже. он будет принимать первый параметр в качестве основного объекта, который удерживает все значение и второй объект удержания параметра, который вы должны фильтровать из основного.

Определение объектов:

data: any[]; 
searchValue:any[]; 
constructor(){ 
    this.data = [ 'apple', 'banana', 'carrot', 'pear', 'peach', 'orange','mango', 'grapes', 'lime', 'lemon' ]; 
    this.searchValue = [ 'apple', 'peach', 'orange' ]  
} 

Поиск труб:

export class SearchPipe implements PipeTransform { 
    transform(items:any[], args:string[]):any[] { 
     if (typeof items === 'object') { 
      var resultArray = []; 
      if (args.length === 0) { 
       resultArray = items; 
      } 
      else { 
       for (let item of items) { 
        if (item != null && args.indexOf(item)>=0) { 
         resultArray.push(item); 
        }      
       } 
      } 
      return resultArray; 
     } 
     else { 
      return null; 
     } 

    } 
} 

HTML:

<div class="item" *ngFor="let item of data | searchPipe: searchValue"> 
    {{item}} 
</div> 

Выход:

enter image description here

+0

спасибо за сообщение, но моя цель - фильтровать массив, используя свойства объекта. –

+0

Я думаю, что мой пост может помочь вам, вы должны, возможно, внести некоторые изменения в свою логику –

0

@sandip Патель спасибо за Ваш ответ. Я немного изменил ваш ответ.

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

    @Pipe({ 
     name: 'inFilter', 
     pure: false 
    }) 

    export class InFilterPipe implements PipeTransform { 
     transform(items: any[], args: any): any[] { 
      if (typeof items === 'object') { 
       var resultArray = []; 
       if (args.args.length === 0) { 
        resultArray = items; 
       } 
       else { 
        for (let item of items) { 
         if (item != null && args.args.indexOf(item[args.key]) >= 0) { 
          resultArray.push(item); 
         } 
        } 
       } 
       return resultArray; 
      } 
      else { 
       return null; 
      } 

     } 
    } 

поэтому я могу фильтровать свой массив, который мне нужен.

 Смежные вопросы

  • Нет связанных вопросов^_^