javascript - 如何在具有最多出现值的对象的数组中查找值(深度模式)?
问题描述
假设我有一个包含如下对象的数组:
const persons = [
{
name: "Erik",
age: 45
},
{
name: "Bob",
age: 37
},
{
name: "Erik",
age: 28
},
{
name: "Jasper",
age: 29
},
{
name: "Erik",
age: 34
}
];
如何根据出现次数最多的键找到值?在此示例中,当name
作为键传递时,将是Erik
.
像这样的东西:
const deepMode = (array, key) => {
// Perhaps something with .reduce?
}
当被调用时,它应该返回:
deepMode(persons, "name"); // Returns "Erik"
解决方案
您可以Map
计算出现次数并减少键/值对以获得最大值。返回密钥而不再次迭代。
const
deepMode = (array, key) => Array
.from(array.reduce((m, o) => m.set(o[key], (m.get(o[key]) || 0) + 1), new Map))
.reduce((a, b) => a[1] > b[1] ? a : b)[0],
persons = [{ name: "Erik", age: 45 }, { name: "Bob", age: 37 }, { name: "Erik", age: 28 }, { name: "Jasper", age: 29 }, { name: "Erik", age: 34 }];
console.log(deepMode(persons, 'name'));
推荐阅读
- arrays - 分配数组不会增加结构大小
- python - 如何将数据框导出到 Excel 并仅打印新的数据框行?
- reactjs - React-Native redux 表单包
- javascript - 如何将变量传递给 VueJs 中的边框样式属性
- magento - 找不到持久卷声明“媒体”
- c# - c#方法重载选择错误的重载并编译
- python - 大熊猫石斑鱼 + 时移
- c++ - C++ 计时器在没有阻塞的情况下在主线程上运行 (C++11/14/17/20)
- ansible - 当主机1在ansible中失败时如何使用组中的第二台主机?
- csv - 如何将 jsonPath 的输出转换为空手道中的 csv 字符串