Javascript 数组中的最高出现次数或第一个选定的

Javascript 数组中的最高出现次数或第一个选定的,javascript,jquery,Javascript,Jquery,我试图获取数组值的最高匹配度,如果存在相等匹配度,我应该获取相等匹配度的第一个选定值 例如: var数组=['25','50','a','a','b','c'] 在这种情况下,我应该得到a var数组=['75','100','a','b','b','a'] 在这种情况下,我还应该得到a 我已经做了相当多的搜索,并找到了一些有用的帖子,例如: 不知何故,我似乎无法修改这些示例以适用于我的案例 现在我正在使用下面的代码,但是它返回最后一个选择的相等事件,而不是第一个。(信贷) 欢迎对此提供

我试图获取数组值的最高匹配度,如果存在相等匹配度,我应该获取相等匹配度的第一个选定值

例如:

var数组=['25','50','a','a','b','c']

在这种情况下,我应该得到
a

var数组=['75','100','a','b','b','a']

在这种情况下,我还应该得到
a

我已经做了相当多的搜索,并找到了一些有用的帖子,例如:

不知何故,我似乎无法修改这些示例以适用于我的案例

现在我正在使用下面的代码,但是它返回最后一个选择的相等事件,而不是第一个。(信贷)

欢迎对此提供任何帮助。

编辑:新建JSFIDLE

像这样:

var数组=['75','100','b','b','a','a'];
var-mf=1;
var m=0;
var项目;
对于(var i=0;iEDITED:newjsfiddle)

像这样:

var数组=['75','100','b','b','a','a'];
var-mf=1;
var m=0;
var项目;
对于(var i=0;i尝试以下方法:

const mostFrequent=arr=>{
设maxCount=0;
常量引用=新映射();
arr.forEach(x=>{
常量计数=出现次数。有(x)?出现次数。获取(x)+1:1;
事件集(x,计数);
maxCount=count>maxCount?计数:maxCount;
});
返回Array.from(引用).find([element,count])=>count==maxCount)[0];
};
log(最频繁(['25','50','a','a','b','c']);
log(最频繁(['75','100','a','b','b','a']);
试试这个:

const mostFrequent=arr=>{
设maxCount=0;
常量引用=新映射();
arr.forEach(x=>{
常量计数=出现次数。有(x)?出现次数。获取(x)+1:1;
事件集(x,计数);
maxCount=count>maxCount?计数:maxCount;
});
返回Array.from(引用).find([element,count])=>count==maxCount)[0];
};
log(最频繁(['25','50','a','a','b','c']);

log(mostFrequent(['75','100','a','b','b','a']);
您可以使用如下内容:

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 如果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)

,您可以使用以下内容:

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 如果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)

,除了给定的解决方案之外,此方案的复杂性为O(n)-仅为一个循环

基本上有两个对象,一个哈希表和一个结果集,它们通过迭代来维护

函数getValue(数组){ 变量计数=0, 指数=-1; forEach(函数(a,i){ this[a]=this[a]|{count:0,index:i}; 这个[a].count++; 如果(此[a]。计数>计数){ 计数=此[a]。计数; index=此[a]。索引; 返回; } if(this[a].count==count&&this[a].indexlog(getValue(['25','50','a','b','b','a','c']);
除了给定的解决方案之外,此方案的复杂性为O(n)-仅为单个循环

基本上有两个对象,一个哈希表和一个结果集,它们通过迭代来维护

函数getValue(数组){ 变量计数=0, 指数=-1; forEach(函数(a,i){ this[a]=this[a]|{count:0,index:i}; 这个[a].count++; 如果(此[a]。计数>计数){ 计数=此[a]。计数; index=此[a]。索引; 返回; } if(this[a].count==count&&this[a].indexlog(getValue(['25','50','a','b','b','a','c']))
我应该得到相等次数的第一个选定值。
它不符合此标准我也不符合。感谢您花时间帮助我,谢谢。
我应该得到相等次数的第一个选定值。
它也不符合此标准。谢谢您花时间帮助我s、 谢谢。谢谢你的帮助,谢谢。我接受了@daanvanham的答案,因为他的代码对我来说更容易理解。谢谢你的帮助,谢谢。我接受了@daanvanham的答案,因为他的代码对我来说更容易理解。Nina Scholz整天都在,Nina Scholz整天都在。