Пожалуйста, помогите найти ошибку в моем решении (не найти новое решение, а подправить мое, тк мой арсенал инструментов пока что скудноват, а важно понять). Делаю с помощью циклов и вспомогательного флага, но при проверке флага на каждом внутреннем цикле, его значение всегда выдает 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;
}
}