Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取在数组中出现次数最多的项_Javascript_Arrays_Algorithm_Search - Fatal编程技术网

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]);
};