Как отфильтровать массив по свойствам внутри массива массива - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь отфильтровать каждое учреждение в массиве establishments по тому, найден ли specialCategories в массиве establishmentSpecials самого массива establishments.

Я могу отфильтровать для массива establishmentSpecials для каждого заведения, но я хочу сохранить часть заведения, как видно на рисунке.

            //masterEstablishments array is from the db

            //The categories array, to filter out all but the following
            specialCategories = ["Breakfast Special"];

            //The array to hold the filtered establishments
            var establishments;

            //For all Establishments
            for(var i=0;i<masterEstablishments.length;i++){
                //Filter out Catorgory from establishmentSpecials where Category is not found in specialCategories
                establishments = masterEstablishments[i].establishmentSpecials.filter(x => specialCategories.includes(x.Category));
            }

            console.log("Filtered establishments");
            console.log(establishments);

В итоге, например:

        var establishments = [ {address: "55 Garden rd"},
            [{Category: "Breakfast Special"}, {Category: "Dinner Special"}]
          ];

Должен стать

        establishments = [ {address: "55 Garden rd"},
            [{Category: "Breakfast Special"}]
          ];

, поскольку «Специальное ужиновое» не входит в специальныеКатегории

specialCategory = [{Category: "Breakfast Special"}]

Большое спасибо.

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Вы имеете в виду, что вы просто хотели удалить {Category: "Dinner Special"} в заведениях?

        specialCategories = ["Breakfast Special"];

        const establishments = establishments.map((element) => {
          return {
            Cuisine_Type: element.Cuisine_type,
            Address: element.Address, // add the other properties so on and so forth
            establishmentSpecials : element.establishmentSpecials.map((ES_element) =>{
              if (ES_element.Category === specialCategories[0]) {
                return ES_element;
              }                  
            })});
0 голосов
/ 27 марта 2020

Вы должны фильтровать основной массив, а не свойство establishmentSpecials. Используйте array.some(), чтобы проверить, есть ли какое-либо из специальных предложений в массиве специальных категорий.

establishments = masterEstablishments.filter(e => e.establishmentSpecials.some(x => specialCategories.includes(x.Category)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...