如何从过滤函数返回多个值?

时间:2017-11-21 07:19:57

标签: javascript arrays

我试图在typescript中返回多个值,实现搜索过滤器。 如果单独返回工作正常,但如果我试图返回它们似乎不起作用。

这是我的代码:

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'category' })

export class CategoryPipe implements PipeTransform {
  transform(categories: any, searchText: any): any {
    if(searchText == null) return categories;

    return categories.filter(
      function(category){
       var a = category.DistrictName.toLowerCase().indexOf(searchText.toLowerCase()) > -1;
       var b = category.Population.toLowerCase().indexOf(searchText.toLowerCase()) > -1;
       return a;
       //return [a,b];
      }
    )

  }
}

2 个答案:

答案 0 :(得分:0)

以下是Array.filter方法的工作原理:它接受一个函数,其第一个参数是Array中的下一个项,执行一些逻辑并返回一个值,如果值是真的,那么它将包含该项在生产的数组中。这用于filter数组,而不是对数组进行更改。你的意图有点不清楚,但你很可能想用map而不是filter

答案 1 :(得分:0)

返回categories.filter(categories)将返回类别数组中与逻辑中提到的条件匹配的所有值的数组。在您的情况下,您尝试返回布尔值。基本上,如果你想在区域名称有一些搜索文本或人口有一些搜索文本的类别之间进行过滤,那么你可以做如下的事情:

var searchText = 'ist2';
var categories = [
            {
    'DistrictName': 'dist1',
    'Population': 'pop1'
    },
    {
    'DistrictName':  'dist2',
    'Population': 'popist2'
    },
    {
    'DistrictName': 'dist3',
    'Population':'pop3'

    }        
  ];


  function test() {

      return categories.filter(
        function(category){
          return            
 category.DistrictName.toLowerCase().
      indexOf(searchText.toLowerCase()) > -1 ||  
 category.Population.toLowerCase()
     .indexOf(searchText.toLowerCase()) > -1; 
  });

 }

  var filteredArray = test();
  console.log(filteredArray); 

  //output

   **[{
    'DistrictName':  'dist2',
    'Population': 'popist2'
   }]**