@nastinapetrova555

Как вернуть объект из цикла, подходящий под все условия?

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

Условие:
Реализуйте функцию, которая принимает на вход массив (элементы которого — это объекты) и пары ключ-значение (тоже в виде объекта), а возвращает первый элемент исходного массива, значения которого соответствуют переданным парам (всем переданным). Если совпадений не было, то функция должна вернуть null.

Пример вывода
findWhere(
  [
    { title: 'Book of Fooos', author: 'FooBar', year: 1111 },
    { title: 'Cymbeline', author: 'Shakespeare', year: 1611 },
    { title: 'The Tempest', author: 'Shakespeare', year: 1611 },
    { title: 'Book of Foos Barrrs', author: 'FooBar', year: 2222 },
    { title: 'Still foooing', author: 'FooBar', year: 3333 },
    { title: 'Happy Foo', author: 'FooBar', year: 4444 },
  ],
  { author: 'Shakespeare', year: 1611 }
); // { title: 'Cymbeline', author: 'Shakespeare', year: 1611 }


//решение
function findWhere(shelf, book) {
  let flag = true;
  const bookToArr = Object.entries(book);
     for (let [key1, value1] of bookToArr) {
       for (let i of shelf) {
         const bookOnShelfToArr = Object.entries(i);
         for (let [key2, value2] of bookOnShelfToArr) {
           if (value1 !== value2) {
             flag = false;
           }
         }
         if (flag === true) {
           return i;
         } 
      }
    }
  if (flag === false) {
           return null;
         } 
}
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
WblCHA
@WblCHA
const findWhere = (shelf, book) => {
    for (let i = 0; i < shelf.length; i++) {
      let flag = true;
      for (let [key, value] of Object.entries(book)) {
        if (shelf[i][key] !== value) {
          flag = false;
          break;
        }
      }
      if (flag) {
        return shelf[i];
      }
    }

    return null;
  };
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы