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

Что неправильно?

Задача:
Напиши функцию 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 prodName = [];
  const prodQuantity = [];
  const prodPrice = [];
  const prodCategory = [];

  for (const product of products) {
    prodName.push(product.name);
    prodQuantity.push(product.quantity);
    prodQuantity.push(product.price);
    prodQuantity.push(product.category);
  }
  
  return prodName;
  return prodQuantity;
  return prodPrice;
  return prodCategory;
}


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

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

У вас функция неправильно написана.

Во первых вы обновляете только prodName и prodQuantity

  for (const product of products) {
    prodName.push(product.name);
    prodQuantity.push(product.quantity);
    prodQuantity.push(product.price);
    prodQuantity.push(product.category);
  }

Во вторых, когда функция натыкается на return, она завершает своё выполнение. Всё что ниже return-a не имеет смысла.

Вот исправленный вариант вашей функции:

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 prodName = [];
  const prodQuantity = [];
  const prodPrice = [];
  const prodCategory = [];

  for (const product of products) {
    prodName.push(product.name);
    prodQuantity.push(product.quantity);
    prodPrice.push(product.price);
    prodCategory.push(product.category);
  }

  switch(propName) {
    case 'name':
      return prodName;
    case 'quantity':
      return prodQuantity;
    case 'price':
      return prodPrice;
    case 'category':
      return prodCategory;
  }
}

const prices = getAllPropValues('price')
console.log(prices)


UPD Либо вот, немножко изменённая версия функции:

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 availableProps = ['name', 'price', 'quantity']
  
  if (availableProps.includes(propName)) {
    return products.map((item) => item[propName])
  }
}

const prices = getAllPropValues('price')
console.log(prices)

→ Ссылка