首页 > 解决方案 > 如何在具有最多出​​现值的对象的数组中查找值(深度模式)?

问题描述

假设我有一个包含如下对象的数组:

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"

标签: javascript

解决方案


您可以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'));


推荐阅读