Найдите самый большой элемент в массиве объектов и верните имя - PullRequest
0 голосов
/ 18 июня 2020

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

Мой мыслительный процесс здесь заключается в использовании .map (), чтобы l oop по массиву и цели цена собственности. Затем используйте .reduce () и Math.max (), чтобы найти наибольшее число. Я считаю, что до сих пор мне это удалось. Теперь мне нужно написать код, чтобы вернуть itemName, связанный с ранее возвращенной максимальной ценой.

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

      let items = [
  {
    itemName: "Good Habits",
    type: "book",
    price: 13.99
  },
  {
    itemName: "Macbook Pro",
    type: "computer",
    price: 299.99
  },
  {
    itemName: "Center of Gravity",
    type: "book",
    price: 15.00
  }
]

function mostExpensiveItem(items){
  let most = items.map(o => o.price).reduce(function(a, b) {
    return Math.max(a, b);
    })
    console.log(most)``
}

Ответы [ 3 ]

1 голос
/ 18 июня 2020

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

let items = [
  {
    itemName: "Good Habits",
    type: "book",
    price: 13.99
  },
  {
    itemName: "Macbook Pro",
    type: "computer",
    price: 299.99
  },
  {
    itemName: "Center of Gravity",
    type: "book",
    price: 15.00
  }
]

var res = items.reduce((acc, elem)=>{
  if(!acc.price || acc && acc.price < elem.price){
    acc = elem
  }
  return acc;
},{});
console.log(res.itemName)

Или вы можете просто отсортировать по убыванию по цене и получить первый элемент.

let items = [
  {
    itemName: "Good Habits",
    type: "book",
    price: 13.99
  },
  {
    itemName: "Macbook Pro",
    type: "computer",
    price: 299.99
  },
  {
    itemName: "Center of Gravity",
    type: "book",
    price: 15.00
  }
]

console.log(items.sort((a,b)=>  b.price - a.price)[0].itemName);
   
1 голос
/ 18 июня 2020
function mostExpensiveItem(items) {
    return items.reduce((p, v) => p.price > v.price ? p : v).itemName;
}
0 голосов
/ 18 июня 2020

Вы можете получить массив объектов с той же максимальной процедурой и сопоставить имена объектов.

let items = [{ itemName: "Good Habits", type: "book", price: 13.99 }, { itemName: "Macbook Pro", type: "computer", price: 299.99 }, { itemName: "Center of Gravity", type: "book", price: 15.00 }],
    result = items
        .reduce((r, o, i) => {
            if (!i || r[0].price < o.price) return [o];
            else if (r[0].price === o.price) r.push(o);
            return r;
        }, [])
        .map(({ itemName }) => itemName);

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