处理过滤器管道中的空字符串,空值和未定义值[Angular]

时间:2017-08-24 15:39:23

标签: angular typescript pipe

我正在编写一个管道来过滤对象数组中的值。我已经实现了基础,但是我在处理空字符串,空值和未定义的值时遇到了问题。只要将其中一个值传递给管道,就应返回数组中的所有值。管道能够过滤对象的属性,以及过滤原始字符串或数值的数组。我有一些我写过的测试用例。除了处理这篇文章标题的人之外,所有人都在过世。

属性-filter.pipe.ts

export class PropertyFilterPipe implements PipeTransform {

  transform(value: any[], args: any[] | any): any[] {
    const filterProperty = args[1]; // property to filter on
    const minVal = args[0] || args; // input from user to filter
    return value.filter((item: any) => {
      if (item[filterProperty] && minVal !== ('' || undefined || null))
        return item[filterProperty].toString().includes(minVal);
      else if (minVal === ('' || undefined || null)) // where I'm trying to handle the "empty" cases
        return (item[filterProperty].toString().includes(item) || item.toString().includes(item));
      else return item.toString().includes(minVal);
    });
  }

}

测试用例失败

it('should return a list of all matches if the user has not given any input', function () {
    const icas = [
      {ica: '123'},
      {ica: '456'},
      {ica: '789'},
      {ica: '1234'}
    ];
    const filterProp = 'ica';
    const nums = [123, 456, 789];
    let result = pipe.transform(icas, ['', filterProp]);
    expect(result).toEqual(icas);
    result = pipe.transform(icas, [null, filterProp]);
    expect(result).toEqual(icas);
    result = pipe.transform(icas, [undefined, filterProp]);
    expect(result).toEqual(icas);
    result = pipe.transform(nums, '');
    expect(result).toEqual([123, 456, 789]);
    result = pipe.transform(nums, null);
    expect(result).toEqual([123, 456, 789]);
    result = pipe.transform(nums, undefined);
    expect(result).toEqual([123, 456, 789]);
  });

测试用例中expect语句的结果是一个空数组,它应该返回所有值的数组(即icasnums)。

1 个答案:

答案 0 :(得分:0)

您的测试似乎不对,但您的实现是。

else if语句右侧的条件始终为false。所以你实际上正在检查minVal === false,这绝不是这种情况。

将此更改为else if (!minVal) { ... }就足够了。

编辑:同样适用于第一个条件,它应该是if (item[filterProperty] && minVal)