Javascript 使用哈希映射和对象的数组的频率

Javascript 使用哈希映射和对象的数组的频率,javascript,Javascript,您会注意到,我正在尝试使用hashmaps和object分析给定数组中哪一个值出现频率最高。如果可以,请尝试确定每个算法(hashmap和object)的答案 下面的示例使用hashmaps相互“映射”各种对象。然而,我有两个问题:1。我不能正确地增加出现次数:出现变量等于1后,该值将永远保留,因此算法提供了错误的模式。2.我不知道迭代完成后如何更改贴图的值 var highestFrequency = (array) => { var occurenceStored = new Ma

您会注意到,我正在尝试使用hashmaps和object分析给定数组中哪一个值出现频率最高。如果可以,请尝试确定每个算法(hashmap和object)的答案

下面的示例使用hashmaps相互“映射”各种对象。然而,我有两个问题:1。我不能正确地增加出现次数:出现变量等于1后,该值将永远保留,因此算法提供了错误的模式。2.我不知道迭代完成后如何更改贴图的值

var highestFrequency = (array) => {
  var occurenceStored = new Map();
  let occurrence = 0;
  for (var i = 0; i < array.length; i++){
    var j = i + 1;
    if (array[i] === array[j]){
      occurrence += 1;
      occurenceStored.set(array[i], occurrence)
    }
  }

  console.log(occurenceStored);
}


highestFrequency([101, 104, 108, 108, 111, 119, 119, 119])
var最高频率=(数组)=>{
var occurrencestored=新映射();
让发生=0;
对于(var i=0;i
我决定不使用hashmap,而是使用对象,但我遇到了同样的问题。发生变量永久等于1。我尝试在不同的位置声明事件变量,但似乎找不到正确的修复方法

var highestFrequency = (array) => {
  var occurenceStored = {};
  let occurrence = 1;
  for (var i = 0; i < array.length; i++){
    var j = i + 1;
    if (array[i] === array[j]){
      occurenceStored[array[i]] = occurrence;
    }
  }

  console.log(occurenceStored);
}


highestFrequency([101, 104, 108, 108, 111, 119, 119, 119, 120, 120, 120])
var最高频率=(数组)=>{
var occurrencestored={};
设发生率=1;
对于(var i=0;i
如果您需要使用地图,则可以通过以下方式:

const highestFreq=(数组)=>{
让myMap=newmap();
for(设i=0;iconsole.log(myMap)使用对象方式,可以实现如下所示:

var highestFrequency = (array) => {
  var occurenceStored = {};
  for (var i = 0; i < array.length; i++){
    
    if (occurenceStored[array[i]]){
      occurenceStored[array[i]] = occurenceStored[array[i]]+1;
    } else{
        occurenceStored[array[i]]=1;
    }
  }

  console.log(occurenceStored);
}
var最高频率=(数组)=>{
var occurrencestored={};
对于(var i=0;i
假设您只需要最频繁的值(如果有两个频率相同的不同值怎么办?):

  • 每个值递增一个计数器
  • 迭代时,如果某个计数器大于最大计数器,则将其设为最大计数器

使用
reduce
方法如何<代码>数组.reduce((a,e)=>(a[e]=a[e]| | 0,a[e]++,a),{})
const highestFreq = arr => {
  const best = { value: 0, n: 0 } // what to do if empty array ??
  arr.reduce((m, el) => {
    const counter = (m.get(el) || 0) + 1
    if (counter > best.n) {
      best.value = el
      best.n = counter
    }
    return m.set(el, counter)
  }, new Map())
  return best // or compute your frequency: best.n / arr.length
}

console.log(highestFreq([101, 104, 108, 108, 111, 119, 119, 119]))