Посему ты (Javascript Алгоритм Challenge) - PullRequest
0 голосов
/ 29 апреля 2020

Вопрос

Создайте функцию, которая просматривает массив объектов (первый аргумент) и возвращает массив всех объектов, имеющих совпадающие пары имя и значение (второй аргумент). Каждая пара имя-значение исходного объекта должна присутствовать в объекте из коллекции, если она должна быть включена в возвращаемый массив.

Например, если первый аргумент [{first: "Romeo ", last:" Montague "}, {first:" Mercutio ", last: null}, {first:" Tybalt ", last:" Capulet "}], а вторым аргументом является {last:" Capulet "}, затем Вы должны вернуть третий объект из массива (первый аргумент), поскольку он содержит имя и его значение, которое было передано в качестве второго аргумента.

Моя попытка

function whatIsInAName(collection, source) {

let filteredCollection = collection.filter((item)=>{
  return collection[item].indexOf((source[item])> 0);

})
  return filteredCollection;
}



whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });

Мой вопрос

Я действительно пытался l oop через объекты и найти соответствующие ключи и значения в то же время время. Кажется, определенные функции не работают с объектами, как с массивами.

Ваша помощь очень важна для решения этой проблемы с кодом?

1 Ответ

1 голос
/ 30 апреля 2020

Несколько вопросов:

  • (source[item])> 0 - логическое выражение, поэтому вы на самом деле делаете .indexOf(true) или .indexOf(false), ни то, ни другое не имеет смысла.
  • indexOf может найти заданный объект в массиве, но его нельзя использовать для поиска элементов массива, которые удовлетворяют некоторому условию, а это именно то, что вам нужно. Вы должны использовать другой метод.
  • Поскольку второй аргумент может иметь несколько свойств, которые должны совпадать, вам нужно где-то al oop, который перебирает эти свойства. В вашем коде нет такого l oop.

Вы можете сделать это так:

function whatIsInAName(collection, source) {
    let filteredCollection = collection.filter((item) => {
        return Object.entries(source).every(([key, value]) => {
             return item[key] === value;
        });
    });
    return filteredCollection;
}

let result = whatIsInAName([{ first: "Romeo", last: "Montague" }, 
                            { first: "Tybalt", last: "Capulet" }], 
                           { last: "Capulet" });
console.log(result);

Обратите внимание, что вы можете использовать более короткий синтаксис функции стрелки, когда нет кодового блока, а есть только выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...