获取数组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)向我们展示您的尝试。如果您只需要一个概念:将元素作为键扔进一个对象中,并在每次碰撞时将其值得尊敬的值增加一