Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取数组JavaScript中出现最多的元素_Javascript_Arrays_Frequency - Fatal编程技术网

获取数组JavaScript中出现最多的元素

获取数组JavaScript中出现最多的元素,javascript,arrays,frequency,Javascript,Arrays,Frequency,我有一个数组,我想得到最多出现的元素 第一种情况 因此,在本例中,我希望新数组具有 console.log(newArr) // ['foo', 'bar'] console.log(newArr) // ['foo'] 因为值“foo”和“bar”是数组中最常出现的元素 第二种情况 因此,在本例中,我希望新数组具有 console.log(newArr) // ['foo', 'bar'] console.log(newArr) // ['foo'] 因为值“foo”是数组中最常出

我有一个数组,我想得到最多出现的元素

第一种情况

因此,在本例中,我希望新数组具有

console.log(newArr) // ['foo', 'bar'] 
console.log(newArr) // ['foo']
因为值“foo”和“bar”是数组中最常出现的元素

第二种情况

因此,在本例中,我希望新数组具有

console.log(newArr) // ['foo', 'bar'] 
console.log(newArr) // ['foo']
因为值“foo”是数组中最常出现的元素

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

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

您可以使用
reduce
对项目进行计数,并找到最大发生计数。然后,您可以筛选具有该计数的任何键:

让arr=['foo','foo','foo','bar','bar','bar','baz','baz'];
让计数=arr.reduce((a,c)=>{
a[c]=(a[c]| 0)+1;
返回a;
}, {});
设maxCount=Math.max(…Object.values(counts));
让mostFrequent=Object.keys(counts).filter(k=>counts[k]==maxCount);

控制台日志(最频繁)
您可以计算每个值的
max
,并仅通过将它们分组为以下值来返回匹配的值:

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
如果(i==a.length-1){
r=Object.entries(r.filter)([k,v])=>v==r.max&&k!='max')
返回r.map(x=>x[0])
}
返回r
},{max:0})
log(最频繁(['foo','foo','foo','bar','bar','bar','baz','baz']))

console.log(最频繁的(['foo','foo','foo','bar','baz'])
您还可以使用
进行of
循环和
ì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);

你如何定义“最频繁”?出现次数超过2次还是前n?您尝试过哪些代码,但仍然停留在这些代码上?向我们展示您实现itI的尝试我的意思是我想要数组的前n个元素,如果多个元素为n@gg,则可以是单个元素或更多元素。您的问题不清楚。1) 请解释您的问题,以定义您对“频繁元素”的定义。2)向我们展示您的尝试。如果您只需要一个概念:将元素作为键扔进一个对象中,并在每次碰撞时将其值得尊敬的值增加一