Угловые 2 отфильтровывают повторяющиеся выпадающие эпизоды

89
9

Кто-нибудь знает, как отфильтровать результаты отчетов в раскрывающемся списке am angular 2. В настоящее время я пытаюсь сделать это в шаблоне * ngFor, но не повезло. Я также попробую создать собственную трубку. Данные взяты из массива JSON. В нижеприведенном объекте я пытаюсь показать только один экземпляр "Государственных объектов",

Result in dropdown

Мой объект данных

items[
{
"currentBUName":"Financial Services"
}
{
"currentBUName":"State Owned Entities"
}
{
"currentBUName":"State Owned Entities"
}
]

Вывод моего ts-кода

    <ion-item>
<ion-label>Please select current business unit</ion-label>
<ion-select [(ngModel)]="selectedValue">
<ion-option *ngFor="let indexx of this.items;"[value]="indexx">{{indexx.currentBUName}}</ion-option>
</ion-select>
</ion-item>

спросил(а) 2021-01-25T14:57:56+03:00 5 месяцев назад
1
Решение
99

Другие ответы хороши, но один из способов сделать это - определить его с точки зрения некоторых общих функций полезности

function groupBy<T>(values: T[], keySelector: (value: T) => string): {[key: string]: T[]} {
return values
.map(value => ({ key: keySelector(value), value }))
.reduce((groups, { key, value }) => ({
...groups,
[key]: groups[key] && groups[key].concat(value) || [value]
}), {});
}

function distinctBy<T>(values: T[], keySelector: (value: T) => string): T[] {
const groups = groupBy(values, keySelector);
return Object.values(groups).map(([representative]) => representative);
}

Тогда вы могли бы написать

this.items = distinctBy(incomingItems, item => item.currentBUName);

ответил(а) 2021-01-25T14:57:56+03:00 5 месяцев назад
45

Когда вы устанавливаете значение items функция фильтра использует только уникальные значения. Это можно сделать так:

this.items = this.items.filter((v, i, arr) => arr.indexOf(v) === i);

ПРИМЕЧАНИЕ. Если эти данные поступают с сервера, тогда было бы более целесообразно выполнять эту фильтрацию на стороне сервера, чтобы уменьшить количество дублирующейся информации, которая попадает на провод.

ответил(а) 2021-01-25T14:57:56+03:00 5 месяцев назад
45

Почему бы не использовать фильтр массива?

items = [
{
"currentBUName":"Financial Services"
}
{
"currentBUName":"State Owned Entities"
}
{
"currentBUName":"State Owned Entities"
}
]
uniqueItems = items.filter(function(item, pos) {
return items.indexOf(item) == pos;
})

то вместо этого используйте uniqueItems

ответил(а) 2021-01-25T14:57:56+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема