Создание фильтра многомерного массива с помощью es6 - PullRequest
0 голосов
/ 10 июня 2018

Как показано на скриншоте, я пытаюсь построить логику фильтра, которую нельзя использовать в backend / sql по другим причинам.

enter image description here

Я получаюДанные продукта и фильтры должны быть добавлены друг к другу.Чтобы добиться фильтрации по 1 идентификатору свойства (например, по идентификатору бренда или идентификатору категории), я построил такую ​​функцию:

multiFilter (arr, filters)  {

    const filterKeys = Object.keys(filters);

    return arr.filter(eachObj => {
        return filterKeys.every(eachKey => {

            if (!filters[eachKey].length) {
                return true;
            }
            return filters[eachKey].includes(eachObj[eachKey].id);
        });
    });
}
  • Аргумент arr - это массив Product
  • Аргумент Filters - это информация о том, какие фильтры активны.как например:

         {
            "brands" : [4,6,8],
            "categorys" : [7,2,4,5],
            "additives" : [1,2,3,4,6,8,9,54,32,12]   
         }
    

это работает, пока фильтруется по идентификатору бренда или идентификатору категории на одном уровне продукта.

что я пытаюсь сделатьТеперь необходимо дополнительно фильтровать продукты, например, по присадкам, которые на один уровень глубже, как вы можете видеть на моем скриншоте.есть идеи как этого добиться?

спасибо

1 Ответ

0 голосов
/ 11 июня 2018

ответ:

multiFilter (arr, filters)  {

    const filterKeys = Object.keys(filters);

    return arr.filter(eachObj => {
        return filterKeys.every(eachKey => {

            if (!filters[eachKey].length) {
                return true;
            }

            if(eachObj[eachKey].id) {
                return filters[eachKey].includes(eachObj[eachKey].id );
            } else {
                return filters[eachKey].some(f => eachObj[eachKey].some(v => v.id === f));
            }
        });
    });

}

---->

       return filters[eachKey].some(f => eachObj[eachKey].some(v => v.id === f));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...