Задача. Коллекция значений свойства (автопроверки)

Задача из автопроверок. Напиши функцию getAllPropValues(propName) которая принимает один параметр propName - имя (ключ) свойства. Функция должна вернуть массив всех значений свойства с таким именем из каждого объекта в массиве products. Если в объектах нет свойства с таким именем, функция должна вернуть пустой массив.

Вот мой код:

const products = [

  { name: "Radar", price: 1300, quantity: 4 },

  { name: "Scanner", price: 2700, quantity: 3 },

  { name: "Droid", price: 400, quantity: 7 },

  { name: "Grip", price: 1200, quantity: 9 },

];

function getAllPropValues(propName) {

const keys = Object.values(products);

for(const key of keys){

if(products.key === keys){

  propName.push(key)

}

return propName;

}

return [];

}

getAllPropValues("name");

getAllPropValues("quantity");

getAllPropValues("price");

getAllPropValues("category");

На вот эти пункты проверка ругается:

Ваш код слишком долго исполняется

right answer
Вызов getAllPropValues('quantity') возвращает [4, 3, 7, 9]

right answer
Вызов getAllPropValues('price') возвращает [1300, 2700, 400, 1200]

right answer
Вызов getAllPropValues('category') возвращает []

Подсакажите, пожалуйста...


Ответы (1 шт):

Автор решения: SwaD

Вам не надо перебирать все ключи объекта, достаточно проверить наличие ключа в объекте. И products у вас это массив, который состоит из объектов.

Поэтому надо делать вот так:

function getAllPropValues(propName) {
    const res = []; // Объявляем массив с результатами
    products.forEach((item) => { // Бежим по массиву данных
        if (item.hasOwnProperty(propName)) { // Проверяем у элемента наличие ключа
            res.push(item[propName]) // Если есть добавляем к результату
        }
    })
    return res; // Отдаем ответ
}
→ Ссылка