Javascript 获取在数组中出现次数最多的项
我想找出Javascript 获取在数组中出现次数最多的项,javascript,arrays,algorithm,search,Javascript,Arrays,Algorithm,Search,我想找出2在数组中出现的次数最多。我该怎么做呢?做一个直方图,找到直方图中最大数字的键 var store = ['1','2','2','3','4']; var hist=[]; 对于(变量i=0;i
2
在数组中出现的次数最多。我该怎么做呢?做一个直方图,找到直方图中最大数字的键
var store = ['1','2','2','3','4'];
var hist=[];
对于(变量i=0;i最佳计数){
最佳计数=历史[存储[i];
最佳=商店[i];
}
}
警报(最佳+”在“+最佳计数+”出现次数”时出现最多);
这假设没有关系,或者您不在乎选择哪个 制作直方图,找到直方图中最大数字的关键点
var store = ['1','2','2','3','4'];
var hist=[];
对于(变量i=0;i最佳计数){
最佳计数=历史[存储[i];
最佳=商店[i];
}
}
警报(最佳+”在“+最佳计数+”出现次数”时出现最多);
这假设没有关系,或者您不在乎选择哪个 我会这样做:
var hist = [];
for (var i = 0; i < store.length; i++) {
var n = store[i];
if (hist[n] === undefined) hist[n] = 0;
else hist[n]++;
}
var best_count = hist[store[0]];
var best = store[0];
for (var i = 0; i < store.length; i++) {
if (hist[store[i]] > best_count) {
best_count = hist[store[i]];
best = store[i];
}
}
alert(best + ' occurs the most at ' + best_count + ' occurrences');
我会这样做:
var hist = [];
for (var i = 0; i < store.length; i++) {
var n = store[i];
if (hist[n] === undefined) hist[n] = 0;
else hist[n]++;
}
var best_count = hist[store[0]];
var best = store[0];
for (var i = 0; i < store.length; i++) {
if (hist[store[i]] > best_count) {
best_count = hist[store[i]];
best = store[i];
}
}
alert(best + ' occurs the most at ' + best_count + ' occurrences');
如果对数组进行了排序,则应该可以:
var store = ['1','2','2','3','4'];
var frequency = {}; // array of frequency.
var max = 0; // holds the max frequency.
var result; // holds the max frequency element.
for(var v in store) {
frequency[store[v]]=(frequency[store[v]] || 0)+1; // increment frequency.
if(frequency[store[v]] > max) { // is this frequency > max so far ?
max = frequency[store[v]]; // update max.
result = store[v]; // update result.
}
}
函数流行(数组){
if(array.length==0)返回[null,0];
var n=max=1,maxNum=array[0],pv,cv;
对于(var i=0;i=最大值){
max=n;maxNum=cv;
}
}否则n=1;
}
返回[maxNum,max];
};
流行([1,2,2,3,4,9,9,9,9,9,1,1])
[9, 4]
流行([1,2,2,3,4,9,9,9,9,1,1,10,10,10,10,10])
[10, 5]
如果对数组进行了排序,则应该可以:
var store = ['1','2','2','3','4'];
var frequency = {}; // array of frequency.
var max = 0; // holds the max frequency.
var result; // holds the max frequency element.
for(var v in store) {
frequency[store[v]]=(frequency[store[v]] || 0)+1; // increment frequency.
if(frequency[store[v]] > max) { // is this frequency > max so far ?
max = frequency[store[v]]; // update max.
result = store[v]; // update result.
}
}
函数流行(数组){
if(array.length==0)返回[null,0];
var n=max=1,maxNum=array[0],pv,cv;
对于(var i=0;i=最大值){
max=n;maxNum=cv;
}
}否则n=1;
}
返回[maxNum,max];
};
流行([1,2,2,3,4,9,9,9,9,9,1,1])
[9, 4]
流行([1,2,2,3,4,9,9,9,9,1,1,10,10,10,10,10])
[10, 5]
当计数超过尚未计数的项目数时,此版本将停止查找
它在不排序数组的情况下工作
function popular(array) {
if (array.length == 0) return [null, 0];
var n = max = 1, maxNum = array[0], pv, cv;
for(var i = 0; i < array.length; i++, pv = array[i-1], cv = array[i]) {
if (pv == cv) {
if (++n >= max) {
max = n; maxNum = cv;
}
} else n = 1;
}
return [maxNum, max];
};
popular([1,2,2,3,4,9,9,9,9,1,1])
[9, 4]
popular([1,2,2,3,4,9,9,9,9,1,1,10,10,10,10,10])
[10, 5]
当计数超过尚未计数的项目数时,此版本将停止查找 它在不排序数组的情况下工作
function popular(array) {
if (array.length == 0) return [null, 0];
var n = max = 1, maxNum = array[0], pv, cv;
for(var i = 0; i < array.length; i++, pv = array[i-1], cv = array[i]) {
if (pv == cv) {
if (++n >= max) {
max = n; maxNum = cv;
}
} else n = 1;
}
return [maxNum, max];
};
popular([1,2,2,3,4,9,9,9,9,1,1])
[9, 4]
popular([1,2,2,3,4,9,9,9,9,1,1,10,10,10,10,10])
[10, 5]
如果数组包含字符串,请尝试此解决方案
Array.prototype.most= function(){
var L= this.length, freq= [], unique= [],
tem, max= 1, index, count;
while(L>= max){
tem= this[--L];
if(unique.indexOf(tem)== -1){
unique.push(tem);
index= -1, count= 0;
while((index= this.indexOf(tem, index+1))!= -1){
++count;
}
if(count> max){
freq= [tem];
max= count;
}
else if(count== max) freq.push(tem);
}
}
return [freq, max];
}
//test
var A= ["apples","oranges","oranges","oranges","bananas",
"bananas","oranges","bananas"];
alert(A.most()) // [oranges,4]
A.push("bananas");
alert(A.most()) // [bananas,oranges,4]
如果数组包含字符串,请尝试此解决方案
Array.prototype.most= function(){
var L= this.length, freq= [], unique= [],
tem, max= 1, index, count;
while(L>= max){
tem= this[--L];
if(unique.indexOf(tem)== -1){
unique.push(tem);
index= -1, count= 0;
while((index= this.indexOf(tem, index+1))!= -1){
++count;
}
if(count> max){
freq= [tem];
max= count;
}
else if(count== max) freq.push(tem);
}
}
return [freq, max];
}
//test
var A= ["apples","oranges","oranges","oranges","bananas",
"bananas","oranges","bananas"];
alert(A.most()) // [oranges,4]
A.push("bananas");
alert(A.most()) // [bananas,oranges,4]
为了找到最常见的整数,我用这种方法解决了这个问题
function GetMaxFrequency (array) {
var store = array;
var frequency = []; // array of frequency.
var result; // holds the max frequency element.
for(var v in store) {
var target = store[v];
var numOccurences = $.grep(store, function (elem) {
return elem === target;
}).length;
frequency.push(numOccurences);
}
maxValue = Math.max.apply(this, frequency);
result = store[$.inArray(maxValue,frequency)];
return result;
}
var store = ['ff','cc','cc','ff','ff','ff','ff','ff','ff','yahya','yahya','cc','yahya'];
alert(GetMaxFrequency(store));
功能MOSTCOMON(arr){
//查找第一个最常见的整数,不考虑2个相同的常见整数(平分)
频率=[];
//将所有频率计数设置为0
对于(i=0;imostCommon){
mostCommon=i;
}
}
返回最常见的;
}
为了找到最常见的整数,我用这种方法解决了这个问题
function GetMaxFrequency (array) {
var store = array;
var frequency = []; // array of frequency.
var result; // holds the max frequency element.
for(var v in store) {
var target = store[v];
var numOccurences = $.grep(store, function (elem) {
return elem === target;
}).length;
frequency.push(numOccurences);
}
maxValue = Math.max.apply(this, frequency);
result = store[$.inArray(maxValue,frequency)];
return result;
}
var store = ['ff','cc','cc','ff','ff','ff','ff','ff','ff','yahya','yahya','cc','yahya'];
alert(GetMaxFrequency(store));
功能MOSTCOMON(arr){
//查找第一个最常见的整数,不考虑2个相同的常见整数(平分)
频率=[];
//将所有频率计数设置为0
对于(i=0;imostCommon){
mostCommon=i;
}
}
返回最常见的;
}
排列排序();
var max=0,result,freq=0;
对于(变量i=0;i最大值){
结果=arr[i];
最大值=频率;
}
}
返回结果;
排列排序();
var max=0,result,freq=0;
对于(变量i=0;i最大值){
结果=arr[i];
最大值=频率;
}
}
返回结果;
解决方案,重点是Array.prototype.forEach
以及在多个项目之间共享最大计数时获取多个键的问题
编辑:只有一个循环的提案
var-store=['1','2','2','3','4','5','5'],
分布={},
最大值=0,
结果=[];
store.forEach(函数(a){
分布[a]=(分布[a]| 0)+1;
if(分布[a]>最大值){
最大值=分布[a];
结果=[a];
返回;
}
if(分布[a]==最大值){
结果:推(a);
}
});
console.log('max:'+max);
log('key/s,最大计数:'+JSON.stringify(结果));
控制台日志(分发)
解决方案,重点是Array.prototype.forEach
以及在多个项目之间共享最大计数时获取多个键的问题
编辑:只有一个循环的提案
var-store=['1','2','2','3','4','5','5'],
分布={},
最大值=0,
结果=[];
store.forEach(函数(a){
分布[a]=(分布[a]| 0)+1;
if(分布[a]>最大值){
最大值=分布[a];
Array.prototype.maxBy = function(fn) {
return this.slice(1).reduce((result, element) => (fn(element) > fn(result) ? element : result), this[0]);
};