Angular2 - 在数组内搜索数组

时间:2017-10-11 16:20:37

标签: arrays angular typescript

我有一个events数组,我有一个search()函数(下面)可以过滤它。目前,它仅针对namedate进行过滤。在我的有效载荷中,我有一个tags数组,我试图弄清楚如何将其包含在过滤中。我目前的解决方法是使用我不喜欢的搜索参数重新运行/event端点的按钮。

  search(array: any[], query: string, excludeProps?: string|string[], dateFormat?: string) {
    if (!query || !this._objArrayCheck(array)) {
      return array;
    }
    const lQuery = query.toLowerCase();
    const isoDateRegex = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/; // ISO UTC
    const dateF = dateFormat ? dateFormat : 'medium';
    const filteredArray = array.filter(item => {
      for (const key in item) {
        if (item.hasOwnProperty(key)) {
          if (!excludeProps || excludeProps.indexOf(key) === -1) {
            const thisVal = item[key];
            if (
              // Value is a string and NOT a UTC date
            typeof thisVal === 'string' &&
            !thisVal.match(isoDateRegex) &&
            thisVal.toLowerCase().indexOf(lQuery) !== -1
            ) {
              return true;
            } else if (
              // Value is a Date object or UTC string
            (thisVal instanceof Date || thisVal.toString().match(isoDateRegex)) &&
            // https://angular.io/api/common/DatePipe
            // Matching date format string passed in as param (or default to 'medium')
            this.datePipe.transform(thisVal, dateF).toLowerCase().indexOf(lQuery) !== -1
            ) {
              return true;
            }
          }
        }
      }
    });
    return filteredArray;
  }

我尝试在date查找器之后添加其他添加内容,并在for()上使用item.tags循环,但似乎打字稿并不能让你做传统{{1}循环。

在Ang / Typescript中处理此问题的实际方法是什么?

更新

for

我在想与此类似的东西,但它似乎没有返回任何东西。

示例有效负载

  search(array: any[], query: string, excludeProps?: string|string[], dateFormat?: string) {
    if (!query || !this._objArrayCheck(array)) {
      return array;
    }
    const lQuery = query.toLowerCase();
    const isoDateRegex = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/; // ISO UTC
    const dateF = dateFormat ? dateFormat : 'medium';
    const filteredArray = array.filter(item => {
      for (const key in item) {
        if (item.hasOwnProperty(key)) {
          if (!excludeProps || excludeProps.indexOf(key) === -1) {
            const thisVal = item[key];
            if (
              // Value is a string and NOT a UTC date
            typeof thisVal === 'string' &&
            !thisVal.match(isoDateRegex) &&
            thisVal.toLowerCase().indexOf(lQuery) !== -1
            ) {
              return true;
            } else if (
              // Value is a Date object or UTC string
            (thisVal instanceof Date || thisVal.toString().match(isoDateRegex)) &&
            // https://angular.io/api/common/DatePipe
            // Matching date format string passed in as param (or default to 'medium')
            this.datePipe.transform(thisVal, dateF).toLowerCase().indexOf(lQuery) !== -1
            ) {
              return true;
            } else if (
              typeof thisVal === 'string'
            ) {
              for (var i=0; i < item.tags.length; i++) {
                if (thisVal === item.tags[i]){
                  return true;
                }
              }
            }
          }
        }
      }
    });
    return filteredArray;
  }

我的功能应该能够匹配&#39; gantt&#39;标题仍然显示行。它还应该能够匹配游戏&#39;社交&#39; &#39;家&#39;等,并由于标签拉出相同的记录。它应该能够从开始或结束日期时间拉出来。

0 个答案:

没有答案