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