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
我已经做了相当多的搜索,并找到了一些有用的帖子,例如:
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].index log(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].index log(getValue(['25','50','a','b','b','a','c']))
我应该得到相等次数的第一个选定值。
它不符合此标准我也不符合。感谢您花时间帮助我,谢谢。我应该得到相等次数的第一个选定值。
它也不符合此标准。谢谢您花时间帮助我s、 谢谢。谢谢你的帮助,谢谢。我接受了@daanvanham的答案,因为他的代码对我来说更容易理解。谢谢你的帮助,谢谢。我接受了@daanvanham的答案,因为他的代码对我来说更容易理解。Nina Scholz整天都在,Nina Scholz整天都在。