【问题标题】:How do we get the most different value from object and print out the key of the value我们如何从 object 中获取最大不同的 value 并打印出 value 的 key
【发布时间】:2021-02-26 07:46:06
【问题描述】:

我有一个这样的对象

{ '1': 2, 
  '2': 2, 
  '4': 2, 
  '5': 2, 
  '-2': 2, 
  '-1': 1 
}

是的,我们知道,与它最不同的值是 '1'

所以函数会打印出对象'-1'中的键

哪个函数可以找到密钥?

大约需要几个小时,我还是没有找到,因为对象是一个字符串

任何帮助将不胜感激,谢谢

【问题讨论】:

  • most different 是什么意思?你的意思是存在最少的数量,因为在你的例子中有 5 个二和 1 个?
  • 我已经编辑了格式
  • 我的意思是,对象 -1 的值为 1,它是最不同的,对吧?问题是,如何获得 -1
  • 感谢@Miro,它有助于解决问题,您也可以帮助解决问题吗?
  • 我认为这应该回答你的问题:stackoverflow.com/questions/46917849/…

标签: javascript arrays json object


【解决方案1】:

您可能需要对对象进行两次迭代以首先找到最不频繁的对象,然后获取结果值的键。可能有一种我不知道的更简单的方法。

let obj = { '1': 2, 
  '2': 2, 
  '4': 2, 
  '5': 2, 
  '-2': 2, 
  '-1': 1 
}


function leastFrequentObjKey(obj) {
    var dict = {};
    Object.values(obj).forEach(val => {
        if (!dict[val]) dict[val] = 0;
        dict[val]++;
    });
    
    var value = Math.min.apply(null, Object.values(dict));
    return Object.keys(obj).find(key => obj[key] == value );
}



console.log( leastFrequentObjKey(obj) );

【讨论】:

  • 你真的很善良 Miro,哦,我明白了,我们可以在对象内部迭代两次。谢谢
  • @theDreamer911 检查编辑 - 仅限单一功能
【解决方案2】:

Object.keys 上使用reduce 方法应该会简化。

let obj = { 1: 2, 2: 2, 4: 2, 5: 2, "-2": 2, "-1": 1 };

const res = Object.keys(obj).reduce((min, key) =>
  obj[min] > obj[key] ? key : min
);

console.log(res)

【讨论】:

  • 这会找到最小值。 OP 想要最少的频率
  • @Miro,它正在获取最不频繁(最小值)的对应键,在这种情况下是'-1'对吗?
  • 它恰好在这种情况下起作用。但是,如果 1:-52:-5 它将返回 1。他想要最少的频率 - 而不仅仅是最低频率。
猜你喜欢
  • 2012-09-02
  • 2021-07-22
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多