Найдите самый дорогой предмет в массиве - PullRequest
0 голосов
/ 07 августа 2020

У меня есть массив как таковой:

let items = [
  {
    itemName: "Effective Programming Habits",
    type: "book",
    price: 13.99
  },
  {
    itemName: "Chromebook 2",
    type: "computer",
    price: 399.99
  },
 {
    itemName: "Programming 101",
    type: "book",
    price: 15.00
  } 
]

Мне нужно создать функцию, которая просматривает массив и находит самый дорогой элемент и возвращает itemName. Я новичок в JS и не знаю, как лучше с этим справиться.

Ответы [ 4 ]

2 голосов
/ 07 августа 2020

Вы можете уменьшить метод. Проверьте цены и используйте . для доступа к имени максимального количества элементов.

Из MDN: Метод reduce() выполняет функцию редуктора (которую вы предоставляете) для каждого элемента массива, в результате чего одиночное выходное значение.

? вызывается тернарным оператором (это сокращенная форма if и else)

Подробнее о том, как reduce работает здесь

Live Demo:

let items = [
  {
    itemName: "Effective Programming Habits",
    type: "book",
    price: 13.99
  },
  {
    itemName: "Chromebook 2",
    type: "computer",
    price: 399.99
  },
 {
    itemName: "Programming 101",
    type: "book",
    price: 15.00
  } 
]

let maxItem = items.reduce((max, min) => max.price > min.price ? max : min);

console.log(maxItem.itemName) //Chromebook 2
console.log(maxItem) //Full object
1 голос
/ 07 августа 2020

Вы можете использовать библиотеку Loda sh, ее очень легко и быстро интегрировать. Loda sh "maxBy" может найти максимальное значение из массива. https://lodash.com/docs/4.17.15#maxBy

let items = [
  {
    itemName: "Effective Programming Habits",
    type: "book",
    price: 13.99
  },
  {
    itemName: "Chromebook 2",
    type: "computer",
    price: 399.99
  },
 {
    itemName: "Programming 101",
    type: "book",
    price: 15.00
  } 
]

console.log(_.maxBy(items, function(o) {
      return o.price;
 }));


  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
1 голос
/ 07 августа 2020

Вы можете попробовать это.

function getMostExp(items) {
  let mostExp = 0;
  let name;

  items.forEach(item => {
   if(item.price > mostExp) {
     mostExp = item.price;
     name = item.itemName;
   }
  });

  return name;
}

ОБНОВЛЕНИЕ:

Обновлен ответ, чтобы вернуть itemName вместо price.

0 голосов
/ 07 августа 2020

Отсортируйте массив по цене, затем извлеките последний элемент и получите имя элемента:

items.sort((a,b) => a.price - b.price).pop().itemName

let items = [
  {
    itemName: "Effective Programming Habits",
    type: "book",
    price: 13.99
  },
  {
    itemName: "Chromebook 2",
    type: "computer",
    price: 399.99
  },
 {
    itemName: "Programming 101",
    type: "book",
    price: 15.00
  } 
]
console.log([...items].sort((a,b) => a.price - b.price).pop().itemName)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...