【问题标题】:get most occurring elements in array JavaScript获取数组 JavaScript 中出现次数最多的元素
【发布时间】:2019-04-29 19:14:20
【问题描述】:

我有一个数组,我想获取出现次数最多的元素,

第一个场景

let arr1 = ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz']
let newArr = someFunc(arr1)

所以在这种情况下,我希望新数组具有值

console.log(newArr) // ['foo', 'bar'] 

因为值 'foo' 和 'bar' 是数组中出现次数最多的元素

第二种情况

 let arr2 = ['foo', 'foo', 'foo', 'bar', 'baz']
 let newArr = someFunc(arr2)

所以在这种情况下,我希望新数组具有值

console.log(newArr) // ['foo']

因为值 'foo' 是数组中出现次数最多的元素

这是我尝试过的,即使有多个元素出现相同的次数,它也只会让我获得其中一个元素

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

【问题讨论】:

  • 如何定义“最频繁”?出现次数超过 2 次或排名前 n 次?您尝试过哪些代码被卡住了?
  • 向我们展示您实施它的尝试
  • 我的意思是我想要数组的顶部 n,它可以是单个元素,如果多个元素是 n @gg
  • 您的问题不清楚。 1)请解释您的问题以定义您对“频繁元素”的定义| 2) 向我们展示您的尝试。
  • 如果您只需要一个概念:将元素作为键放入对象中,并在每次碰撞时将其可敬的值增加一个

标签: javascript arrays frequency


【解决方案1】:

您可以使用reduce 计算项目并找到最大出现次数。然后您可以过滤任何具有该计数的键:

let arr = ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz'];

let counts = arr.reduce((a, c) => {
  a[c] = (a[c] || 0) + 1;
  return a;
}, {});
let maxCount = Math.max(...Object.values(counts));
let mostFrequent = Object.keys(counts).filter(k => counts[k] === maxCount);

console.log(mostFrequent);

【讨论】:

    【解决方案2】:

    您可以计算每个值的max,并仅返回通过将它们与Array.reduce 分组匹配的值:

    const mostFrequent = data => data.reduce((r,c,i,a) => {
      r[c] = (r[c] || 0) + 1
      r.max = r[c] > r.max ? r[c] : r.max
      if(i == a.length-1) {
        r = Object.entries(r).filter(([k,v]) => v == r.max && k != 'max')
        return r.map(x => x[0])
      }
      return r
    }, {max: 0})
    
    console.log(mostFrequent(['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz']))
    console.log(mostFrequent(['foo', 'foo', 'foo', 'bar', 'baz']))

    【讨论】:

      【解决方案3】:

      您也可以使用for ofloop 和ìn

      例如

      const arrayFrecuent = [3, 1, 2, 1, 3, 2, 5, 4, 2, 10];
      
      const mostFrecuent = givenArray => {
        let counts = {};
        let maxValue = -1;
        let maxItem = null;
        for (const num of givenArray) {
          if (!(num in counts)) {
            counts[num] = 1;
          } else {
            counts[num] = counts[num] + 1;
          }
          if (counts[num] > maxValue) {
            maxValue = counts[num];
            maxItem = num;
          }
        }
        return maxItem;
      };
      
      const mostFrecuentNumber = mostFrecuent(arrayFrecuent);
      
      console.log("mostFrecuentNumber", mostFrecuentNumber);
      

      【讨论】:

        猜你喜欢
        • 2010-11-06
        • 1970-01-01
        • 2011-04-17
        • 1970-01-01
        • 2012-06-23
        • 2011-04-16
        相关资源
        最近更新 更多