найдите самый высокий ключ со значением из объекта

#javascript #object

Вопрос:

Пытаюсь получить наибольшее значение вместе с его ключом из объекта javascript. Я пробовал разные решения, такие как Object.key или Object.entries, но, похоже, не могу найти выход, никаких мыслей.

 let dates = {
  '2021-08-06': 39,
  '2021-08-07': 0,
  '2021-08-08': 0,
  '2021-08-09': 149,
  '2021-08-10': 174,
  '2021-08-11': 231,
  '2021-08-12': 300,
}
 

предыдущие попытки я мог получить значение с помощью object.keys, но по какой-то причине либо я рисую пробел, либо что-то еще, но я не могу вернуть его ключ.

Это предыдущее решение просто получает минимальное и наибольшее число, но как я могу вернуть соответствующий ключ?

   let arr = Object.keys( dates ).map(function ( key ) { return d[key]; });
  let max = Math.max.apply( null, arr );
  let maxKey, maxValue = 0;

  for(const [key, value] of Object.entries(dates)) {
    if(value > max) {
      maxValue = value;
      maxKey = key;
    }
  }

  console.log(maxKey,maxValue);
 

Ответ №1:

Легко. Отсортируйте объект.записи по значению, затем верните первую «запись».

Результат будет представлен в виде ["key", value]

 let dates = {
  '2021-08-06': 39,
  '2021-08-07': 0,
  '2021-08-08': 0,
  '2021-08-09': 149,
  '2021-08-10': 174,
  '2021-08-11': 231,
  '2021-08-12': 300
}
const result = Object.entries(dates).sort(([, a], [, b]) => b - a)[0];
console.log(result); 

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

 let dates = {
  '2021-08-06': 39,
  '2021-08-07': 0,
  '2021-08-08': 0,
  '2021-08-09': 149,
  '2021-08-10': 174,
  '2021-08-11': 231,
  '2021-08-12': 300
}
const result = Object.entries(dates).sort(function(a, b) {
  return b[1] - a[1];
})[0];
console.log(result); 

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

1. @PeterSeliger — наверное, потому, что я ничего не сказал :p

2. @PeterSeliger — хотя мне на самом деле все равно. Видите ли, в Интернете есть болезнь — социальные сети выявляют худшее в людях, и я думаю, что некоторые приходят сюда и ведут себя так же

3. почему :p Я думаю, что OP уже знает об объекте.записи

Ответ №2:

Вы можете использовать:

 Object.entries(dates).sort((a, b) => {
  return b[1] - a[1]
})[0]
 

чтобы получить наибольшее значение вместе с его ключом в массиве.

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

1. @PeterSeliger — вероятно, один и тот же человек 😀

2. Как это работает, так a как и b являются массивами?

3. Я отредактировал, чтобы это действительно работало, извините за причиненные неудобства