Фильтрация массива объектов, имеющих 2 элемента в качестве ссылки в angular

#javascript #arrays #angular

#javascript #массивы #angular

Вопрос:

Добрый день, разработчики, у меня есть эти 2 массива

 let arrayOfBookings=[
 {restaurantId: 1, turnName: "10:00_am"},
 {restaurantId: 1, turnName: "11:00_am"},
 {restaurantId: 2, turnName: "11:00_am"}
];

let restaurantSelectedTurns=[
 {restaurantId: 1, turnName: "10:00_am"},
 {restaurantId: 1, turnName: "11:00_am"},
 {restaurantId: 1, turnName: "12:00_am"},
 {restaurantId: 1, turnName: "01:00_pm"}
];
  

Имея в виду элементы каждого объекта (restaurantId и turnName), где, если, во-первых
, restaurantId обоих сравниваемых элементов равны, тогда можно будет проверить, не является ли turnName.
Если это так, то я бы отправил этот объект в новый контейнер массива.
Таким образом, имея в виду эту логику, я установил это

 ...some variable called noRepeated:[]=[];

restaurantSelectedTurns.forEach((turn) => {
            arrayOfBookings.forEach((booking) => {
              if (turn.restaurantId == booking.restaurantId) {
                if (turn.turnName != booking.turnName) {
                  this.noRepeated.push(turn);
                }
              }
             

            });
            console.log(this.noRepeated);
          });
  

Но по какой-либо причине, когда я регистрирую не повторяющийся результат, я получаю это

 
 {restaurantId: 1, turnName: "10:00_am"},
 {restaurantId: 1, turnName: "11:00_am"},
 {restaurantId: 1, turnName: "12:00_am"},
 {restaurantId: 1, turnName: "12:00_am"},
 {restaurantId: 1, turnName: "01:00_pm"},
 {restaurantId: 1, turnName: "01:00_pm"},
  

вместо

 {restaurantId: 1, turnName: "12:00_am"},
 {restaurantId: 1, turnName: "01:00_pm"},
  

Эта логика использует angular .
Заранее спасибо!!!!

Ответ №1:

  1. первая ошибка, которую вы допускаете в своем коде, заключается в том, что вы повторяете массив, содержащий больше элементов.
  2. во-вторых, вам не нужно перебирать 2 таблицы и создавать внутри них условие, что считается не решением для хорошей производительности.

Поэтому я пытаюсь сделать для вас простое решение:

 const newArrayOfRestaurants = [];
for (const item of arrayOfBookings) {
    if (restaurantSelectedTurns.some(elt => elt.restaurantId === item.restaurantId amp;amp; elt.turnName === item.turnName)){
        newArrayOfRestaurants.push(item);
    }
}