首页 > 解决方案 > 如何获得在数组中出现最多的前五个元素?

问题描述

我已经知道如何获取在数组中出现最多的元素,但现在我需要获取在数组中出现最多的前 5 个元素。

我有这个数组:

[
  "fuji",
  "acros",
  "bombshell",
  "4za",
  "aerozine",
  "bianchi-milano",
  "bianchi-milano",
  "aerozine",
  "rapha",
  "rapha",
  "rapha",
  "100%",
  "100%",
  "100%",
  "100%"
];

所以前五名应该是:

[
  "100%",
  "rapha",
  "bianchi-milano",
  "aerozine",
  "fuji" // This one can be random as all the rest appears only once
]

这是我找到重复最多的代码:

array.sort( (a, b) => arr.filter(v => v === a).length - arr.filter(v => v === b).length ) .pop();

任何帮助以及澄清都将意味着很多!谢谢!!

标签: javascriptarraysreactjs

解决方案


const myArray = [
    'fuji',
    'acros',
    'bombshell',
    '4za',
    'aerozine',
    'bianchi-milano',
    'bianchi-milano',
    'aerozine',
    'rapha',
    'rapha',
    'rapha',
    '100%',
    '100%',
    '100%',
    '100%'
]
const sortByFrequency = (array) => {
    var frequency = {}

    array.forEach(function (value) { frequency[value] = 0 })

    var uniques = array.filter(function (value) {
        return ++frequency[value] == 1
    })

    return uniques.sort(function (a, b) {
        const y = frequency[b] - frequency[a]
        return y
    })
}

然后调用这个函数:

sortByFrequency(myArray).slice(0, 5)


推荐阅读