Как получить максимальное и минимальное значение в массиве объектов в javascript?

Мне нужно получить максимальное и минимальное значение массива с несколькими объектами. Я знаю, что в Javascript мы можем использовать для этого Math.min и Math.max в дополнение к другим стратегиям.

Это мое решение работает, но я нахожу код слишком многословным. Можете ли вы сказать мне, как его улучшить?

Заранее большое спасибо.

Вот мой код, который я поместил в codeandbox.io

const skuStylePlu = [{
    skuPrice: {
      currentPrice: {
        amount: 10
      }
    }
  },
  {
    skuPrice: {
      currentPrice: {
        amount: 20
      }
    }
  },
  {
    skuPrice: {
      currentPrice: {
        amount: 30
      }
    }
  },
  {
    skuPrice: {
      currentPrice: {
        amount: 40
      }
    }
  },
  {
    skuPrice: {
      currentPrice: {
        amount: 50
      }
    }
  }
];

let lowest = Number.POSITIVE_INFINITY;
let highest = Number.NEGATIVE_INFINITY;
let temp;

for (let i = skuStylePlu.length - 1; i >= 0; i--) {
  temp = skuStylePlu[i].skuPrice.currentPrice;

  if (temp.amount < lowest) {
    lowest = temp.amount;
  }
  if (temp.amount > highest) {
    highest = temp.amount;
  }
}

console.info(lowest, highest); // return 10, 50

Ваш код в порядке, если вы не хотите использовать эти два.

Ankit 15.02.2023 17:57
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему &apos;[] instanceof Object&apos; возвращает &quot;true&quot;?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
2
1
52
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте метод сокращения вместо цикла for.

const skuStylePlu = [{
    skuPrice: {
      currentPrice: {
        amount: 10
      }
    }
  },
  {
    skuPrice: {
      currentPrice: {
        amount: 20
      }
    }
  },
  {
    skuPrice: {
      currentPrice: {
        amount: 30
      }
    }
  },
  {
    skuPrice: {
      currentPrice: {
        amount: 40
      }
    }
  },
  {
    skuPrice: {
      currentPrice: {
        amount: 50
      }
    }
  }
];
const prices = skuStylePlu.map(obj => obj.skuPrice.currentPrice.amount);
const lowest = prices.reduce((acc, curr) => Math.min(acc, curr), Number.POSITIVE_INFINITY);
const highest = prices.reduce((acc, curr) => Math.max(acc, curr), Number.NEGATIVE_INFINITY);
console.info(lowest, highest);

Большое спасибо, Рори!! Замечательно

Katyellen 15.02.2023 18:51

Вы можете начать со значения с нулевого индекса и получить значение напрямую, а не с последнего объекта.

Затем выполните цикл до индекса один.

const
    skuStylePlu = [{ skuPrice: { currentPrice: { amount: 10 } } }, { skuPrice: { currentPrice: { amount: 20 } } }, { skuPrice: { currentPrice: { amount: 30 } } }, { skuPrice: { currentPrice: { amount: 40 } } }, { skuPrice: { currentPrice: { amount: 50 } } } ];
    
let lowest = skuStylePlu[0].skuPrice.currentPrice.amount,
    highest = skuStylePlu[0].skuPrice.currentPrice.amount,
    i = skuStylePlu.length;

while (--i) {
    const value = skuStylePlu[i].skuPrice.currentPrice.amount;
    if (value < lowest) lowest = value;
    if (value > highest) highest = value;
}

console.info(lowest, highest); // return 10, 50

Вы можете использовать деструктурирование объекта, чтобы немного привести вещи в порядок.

С циклом for:

const skuStylePlu = [{"skuPrice":{"currentPrice":{"amount":10}}},{"skuPrice":{"currentPrice":{"amount":20}}},{"skuPrice":{"currentPrice":{"amount":30}}},{"skuPrice":{"currentPrice":{"amount":40}}},{"skuPrice":{"currentPrice":{"amount":50}}}];

let lowest = Number.POSITIVE_INFINITY;
let highest = Number.NEGATIVE_INFINITY;

for(const { skuPrice: { currentPrice: { amount } } } of skuStylePlu) {
  lowest = lowest < amount ? lowest : amount;
  highest = highest > amount ? highest : amount;
}

console.info(lowest, highest);

Одиночное сокращение для немного большей лаконичности:

const skuStylePlu = [{"skuPrice":{"currentPrice":{"amount":10}}},{"skuPrice":{"currentPrice":{"amount":20}}},{"skuPrice":{"currentPrice":{"amount":30}}},{"skuPrice":{"currentPrice":{"amount":40}}},{"skuPrice":{"currentPrice":{"amount":50}}}];

const [lowest, highest] = skuStylePlu.reduce(
  ([low, high], { skuPrice: { currentPrice: { amount } } }) =>
    [ low < amount ? low : amount, high > amount ? high : amount ],
  [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]
);

console.info(lowest, highest);

Другие вопросы по теме