- Добро пожаловать, мне жаль, что мне потребовалось некоторое время, чтобы что -то опубликовать. В любом случае, давайте вернемся к этому. В этом посте давайте сделаем функцию, которая просматривает массив объектов (первый аргумент) и возвращает массив всех объектов, которые имеют соответствующие пары имени и значения (второй аргумент). Каждое имя и значение значения исходного объекта должна присутствовать в объекте из коллекции.
- Например, если первый аргумент
[{First: "Randy", Last: "Skywalker"}, {First: "Alan", Last: Null}, {First: "Diego", Last: "Rivera"}]
и второй аргумент —{Последний: "Ривера"}
Затем вы должны вернуть третий объект из массива (первый аргумент), потому что он содержит имя и его значение, которое было принято как второй аргумент.
Хорошо, давайте тогда доберемся до этого. Ниже уже предварительно написано для вас.
function names(collection, target) { var arr = []; // Only change code below this line // Only change code above this line return arr; } names([{ first: "Randy", last: "Skywalker" }, { first: "Alan", last: null }, { first: "Diego", last: "Rivera" }], { last: "Rivera" });
- Отвечать:
function names(collection, target) { let keys = Object.keys(target); return collection.filter(function(obj) { for (let i = 0; i < keys.length; i++) { if (!obj.hasOwnProperty(keys[i]) || obj[keys[i]] !== target[keys[i]]) { return false; } } return true; }) } names([{ first: "Randy", last: "Skywalker" }, { first: "Alan", last: null }, { first: "Diego", last: "Rivera" }], { last: "Rivera" }); // console.log would display the entire object [{ first: 'Diego', last: 'Rivera' }]
! obj
в основном означает, еслиobj
не.- Также есть немного другой способ сделать петлю.
- Бывший:
function names(collection, target) { let keys = Object.keys(target); return collection.filter(function(obj) { for (let key of keys) { if (!obj.hasOwnProperty(key) || obj[keys] !== target[keys]) { return false; } } return true; }) }
Оригинал: «https://dev.to/rthefounding/matching-properties-and-values-in-the-object-4g4e»