首页 > 解决方案 > 从 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);

标签: javascriptobject

解决方案


简单的。根据值对 Object.entries 进行排序,然后返回第一个“条目”

结果将是形式["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);


推荐阅读