Фильтрация многогранного массива, но канал возвращает ошибку - Не удается найти другой поддерживающий объект '[объект Object]' типа 'объект' - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь отфильтровать вывод, но одно поле в массиве является массивом.

Когда я отфильтрую все - я получу все. Если я фильтрую для любого подмножества, console.log (items [i] .tags) выводит в массиве foramat ["Skills", "Learning"]. Второй console.log отображает элемент в массиве (с обоими тегами)

При возврате выдается ошибка:

ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays. at NgForOf.push../node_modules/@angular/common/fesm5/common.js.NgForOf.ngDoCheck

... в HTML:

<span *ngFor="let page of page | tags: tag  ; #nGForArray>

... Массив страниц

[ { 
        "id" : "1", 
        "title" : "Security",  
        "tags" : ["Skills", "Learning"]
    },
{ 
        "id" : "2", 
        "title" : "Home Improvement",  
        "tags" : ["Skills"]
    },

{ 
        "id" : "3", 
        "title" : "Mathematics",  
        "tags" : [""Learning"]
    }
]

... в search.pipe.ts

export class TagPipe implements PipeTransform {

    transform(items: any[], tag: string): any {

        if (!items || !tag) {
            return items;
        }

        var filtertags: any[];

        for (let i = 0; i < items.length; i++) {
            console.log(items[i].tags);
            for (let j = 0; j < items[i].tags.length; i++) {
                if (tag == items[i].tags[j]) {
                    console.log(items[i]);
                    return items[i];
                }
            }

        }
        console.log("end of transform");
        console.log(filtertags);
        return filtertags;

    }

}

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

1 Ответ

0 голосов
/ 06 апреля 2019

Я внес некоторые изменения в ваш метод преобразования, не меняя логику, и прокомментировал их ниже.

Также, если вы изменяете свои элементы во время выполнения, вам может потребоваться определить вашу трубу как нечистую. Просто добавьте «pure: false» в свою трубу, например, @Pipe ({name: «blabla», pure: false})

 transform(items: any[], tag: string): any {
    if (!items || !tag) {
      return items;
    }

    //initialized it
    var filtertags: any[] = [];

    for (let i = 0; i < items.length; i++) {
      console.log(items[i].tags);
      //it was increasing i instead of j
      for (let j = 0; j < items[i].tags.length; j++) {
        if (tag == items[i].tags[j]) {
          console.log(items[i]);
          //instead of returning, push to the filtertags array
          filtertags.push(items[i]);
        }
      }

    }
    console.log("end of transform");
    console.log(filtertags);
    return filtertags;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...