Javascript 使用一个循环查找JS数组中最频繁的项
我创建了一个函数,该函数使用两个for循环查找JS数组中最频繁的项,并显示该项以及数组中的次数。我如何用一个循环来完成它Javascript 使用一个循环查找JS数组中最频繁的项,javascript,arrays,Javascript,Arrays,我创建了一个函数,该函数使用两个for循环查找JS数组中最频繁的项,并显示该项以及数组中的次数。我如何用一个循环来完成它 var arr=[3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3]; //ta = times appeared / m = max / arrchar = array character var ta = 1; var m = 0; var arrchar; for (var i=0; i<arr.length; i
var arr=[3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3];
//ta = times appeared / m = max / arrchar = array character
var ta = 1;
var m = 0;
var arrchar;
for (var i=0; i<arr.length; i++)
{
for (var j=i; j<arr.length; j++)
{
if (arr[i] == arr[j])
m++;
if (ta<m)
{
ta=m;
arrchar = arr[i];
}
}
m=0;
}
console.log(arrchar+"("+ta +")") ;
var arr=[3',a',a',a',2,3',a',3',a',2,4,9,3];
//ta=出现次数/m=最大值/arrchar=数组字符
var-ta=1;
var m=0;
var-arrchar;
对于(var i=0;i而言,最简单的方法是将每个元素的出现次数按降序排序,并获得第一个值
var arr=[3',a',a',a',2,3',a',3',a',2,4,9,3];
让FindMostFrequency=(arr)=>{
返回[…arr.reduce((op,inp)=>{
运算集(inp,(运算集(inp)| | 0)+1)
返回操作
}排序((a,b)=>b[1]-a[1])[0][0]
}
console.log(findmastfrequency(arr))
这里的神奇单词是哈希表。如果您创建每个项目到计数的映射,那么您可以查找递增并将计数存储在O(1)中,同时还可以存储最大计数:
let max = null, maxCount = -Infinity;
const counts = new Map();
for(const el of arr) {
const count = (counts.get(el) || 0) + 1;
counts.set(el, count);
if(count > maxCount) {
maxCount = count;
max = el;
}
}
最佳排序是O(n log n)。这不是真正的“一个循环”。@Jonaswillms添加了另一个版本,它只使用单循环进行排序。downvoter留下评论将帮助我了解更多:)