Найти максимальный элемент и его ключ в Object — React native

#javascript #react-native

#javascript #react-native

Вопрос:

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

У меня есть объект, который содержит ключ (имя службы) и значение (счетчик), я хочу извлечь из этого объекта только максимальное и минимальное значение и их ключи.

пример:

 Object {
  "Learn JavaScript": 3, //Max
  "Learn React": 2, //Ignore
  "manicure": 1, //Min
}
  

и затем я хотел бы создать массив объектов, которые будут содержать их в порядке убывания

код, который я использовал для отображения верхнего результата:

  const arrayofServices  = services; //services => state the holding the services
          const servicesCounter = arrayofServices.reduce((counterObj, service) => {
            if (counterObj.hasOwnProperty(service)) {
              counterObj[service]  = 1;
              return counterObj;
          }
          
            return {
              ...counterObj,
              [service]: 1
            };
          }, {});
          console.log("Service Counter in =>" ,servicesCounter);
  

есть предложения?

Ответ №1:

Еще одна попытка 🙂

 const obj = {"Learn JavaScript": 3, "Learn React": 2, "manicure": 1};

function MinMaxFromObj(obj) {
  const min = Math.min(...Object.values(obj));
  const max = Math.max(...Object.values(obj));
  const minKey = Object.entries(obj).find(([key, value]) => 
  value === min ? key : null);
  const maxKey = Object.entries(obj).find(([key, value]) => 
  value === max ? key : null);
  return [Object.fromEntries([minKey]), Object.fromEntries([maxKey])];
} 

console.log(MinMaxFromObj(obj));  

Комментарии:

1. Мне нужно определить объект? Я получил значения из базы данных

2. если вы получаете данные из базы данных в виде объекта, как описано в вопросе. Вы можете использовать этот объект, передать его функции. Но вам, вероятно, следует проверить, получен объект из базы данных или нет, прежде чем делать это.

3. Я понимаю вас, я сейчас пытаюсь это сделать, и я отвечу как можно скорее

4. Хорошо, это работает, но я не могу понять, как я могу сделать это похожим на объект, который я добавил в журнал

5. о, я исправил возврат функции, теперь она возвращает массив объектов.

Ответ №2:

Вот подход, который может помочь вам решить вашу проблему:

 const minMaxEntry = (object) => {
  let minKey;
  let minValue = Infinity;

  let maxKey;
  let maxValue = -Infinity;

  for (const key in object) {
    if (object[key] < minValue) {
      minKey = key;
      minValue = object[key];
    }

    if (object[key] > maxValue) {
      maxKey = key;
      maxValue = object[key];
    }
  }

  const minEntry = { [minKey]: minValue };
  const maxEntry = { [maxKey]: maxValue };

  return [minEntry, maxEntry];
};

// --- //

const object = {
  "Learn JavaScript": 3,
  "Learn React": 2,
  "manicure": 1,
};

const [minEntry, maxEntry] = minMaxEntry(object);

console.log('Min Entry =>', minEntry);
// { "manicure": 1 }

console.log('Max Entry =>', maxEntry);
// { "Learn JavaScript": 3 }