Использование фильтра Angular Pipe для вложенного массива по нескольким ключам - PullRequest
0 голосов
/ 04 марта 2020

У меня есть это приложение, где у меня есть 3 поля поиска: имя пользователя, организация и активный (логический). При нажатии на кнопку поиска я фильтрую таблицу, используя комбинацию значений выше или по одному поиску.

Мой Json:

[
    {
        "id": 1,
        "userName": "abc",
        "active": true,
        "organisations": [{
            "id": 2,
            "organisation": "org1"
        },
        {
            "id": 3,
            "organisation": "org2"
        }]
    },
    {
        "id": 2,
        "userName": "def",
        "active": true,
        "organisations": [{
            "id": 4,
            "organisation": "org4"
        },
        {
            "id": 5,
            "organisation": "org5"
        }]
    },
    {
        "id": 3,
        "userName": "ghj",
        "active": false,
        "lastLogon": "",
        "organisations": [{
            "id": 6,
            "organisation": "org6"
        },
        {
            "id": 7,
            "organisation": "org7"
        }]
    }
]

Мой фильтр:

@Pipe({name: 'searchfilter'})
export class SearchFilterPipe implements PipeTransform {
    transform(items: Array<any>, filter: {[key: string]: any }): Array<any> {
        return items.filter(item => {
                let notMatchingField = Object.keys(filter)
                                             .find(key => item[key] !== filter[key]);

                return !notMatchingField;
            });
    }
}

My Html:

<tr *ngFor="let user of users | searchfilter: tableFilter;">
     <td>{{ user.userName }}</td>
     <td><input type="checkbox" [checked]="user.active"></td>
</tr>

tableFilter - это объект поиска, который может иметь либо одно поле поиска, либо комбинацию из двух или трех полей. Например: tableFilter = {"userName": "ab c"} или tableFilter = {"userName": "ab c", "active": true} или tableFilter = {"userName": "ab c "," organization: "org6", "active": true}.

Мой код работает для имени пользователя или для активного, или для обоих типов. Но происходит сбой, когда я использую организацию как отдельное поле или как комбинацию, как мой массив вложен.

Так что любая помощь с фильтром трубы будет полезна. Я слышал о библиотеке Loda sh, но я не знаю, как ее использовать. Заранее спасибо.

...