[英]Highest occurrence in an array or first selected
我正在尝试获得数组值的最高出现,并且如果存在相等的出现,则应该获取相等出现的第一个选定值。
例:
var array = ['25', '50', 'a', 'a', 'b', 'c']
在这种情况下,我应该得到a
var array = ['75', '100', 'a', 'b', 'b', 'a']
在这种情况下,我也应该得到a
我已经做了相当多的搜索工作,并找到了一些有用的帖子,例如:
我似乎无法以某种方式修改这些示例以适合我的情况。
现在,我正在使用下面的代码,但是它返回的是最后选择的相等事件,而不是第一个。 (信用https://stackoverflow.com/users/1238344/emissary )
function mostFrequent(array){
return array.sort(function(a,b){
return array.filter(function(v){ return v===a }).length
- array.filter(function(v){ return v===b }).length
}).pop();
}
欢迎对此提供任何帮助。
您可以使用如下形式:
function mostFrequent(array) {
var map = array.map(function(a) {
return array.filter(function(b) {
return a === b;
}).length;
});
return array[map.indexOf(Math.max.apply(null, map))];
}
首先,它创建所有值的出现图。 接下来,只需用Math.max
检查哪一个是最高的即可。 检查indexOf
中出现次数最高的第一个值,并在原始数组中返回该索引的值。
如果选择ES2015,则可以使用此选项。 更少的代码。
function mostFrequent(array) {
let map = array.map((a) => array.filter((b) => a === b).length);
return array[map.indexOf(Math.max.apply(null, map))];
}
如果您所在的位置甚至允许使用传播运算符(NodeJS v5及更高版本,Chrome 54),则可以将Math.max.apply(null, map)
替换为Math.max(...map)
!
尝试这个:
const mostFrequent = arr => { let maxCount = 0; const occurrences = new Map(); arr.forEach(x => { const count = occurrences.has(x) ? occurrences.get(x) + 1 : 1; occurrences.set(x, count); maxCount = count > maxCount ? count : maxCount; }); return Array.from(occurrences).find(([element, count]) => count === maxCount)[0]; }; console.log(mostFrequent(['25', '50', 'a', 'a', 'b', 'c'])); console.log(mostFrequent(['75', '100', 'a', 'b', 'b', 'a']));
它与获取数组中出现次数最多的元素中的方法基本相同,只是最后一行是有效的:与其返回最后一个maxElement
,不返回最后一个maxElement
,而是返回occurrences
图中与maxCount
count
相同的第一个元素。
除了给定的解决方案之外,该建议还具有O(n)的复杂度-仅单个循环。
基本上有两个对象,一个哈希表和一个结果集,它们通过迭代来维护。
function getValue(array) { var count = 0, index = -1; array.forEach(function (a, i) { this[a] = this[a] || { count: 0, index: i }; this[a].count++; if (this[a].count > count) { count = this[a].count; index = this[a].index; return; } if (this[a].count === count && this[a].index < index) { index = this[a].index; } }, Object.create(null)); return array[index]; } console.log(getValue(['25', '50', 'a', 'a', 'b', 'c'])); console.log(getValue(['25', '50', 'a', 'b', 'b', 'a', 'c']));
编辑:新的jsfiddle。
像这样: https : //jsfiddle.net/Ldohv125/1/
var array = ['75', '100', 'b', 'b', 'a', 'a'];
var mf = 1;
var m = 0;
var item;
for (var i=0; i<array.length; i++){
for (var j=i; j<array.length; j++) {
if (array[i] == array[j])
m++;
if (mf<m){
mf=m;
item = array[i];
}
}
m=0;
}
alert(item);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.