通过贡献,我设法找到编写函数的代码来查找给定数字集的模式。我试图准确理解该函数的作用,但我陷入了函数的一部分。
我试过控制台记录所有内容,但我无法理解1部分。
在我们按照它们的外观对数组中的数字进行排序之后,我们使用另一个循环来获取最多出现的数字的键值。在此之前,我们声明变量compare并将其设置为0和空模式变量。
我无法理解的部分是理解为什么我们需要将freq[item]
与比较变量进行比较,如果该陈述为真,我们需要将比较设置为freq[item]
。
有人能够善意地解释那里发生了什么吗?
干杯。
function getMostFrequent(arr) {
var freq = {}
for (item of arr) {
freq[item] ? freq[item]++ : freq[item] = 1
}
var compare = 0
var mode
for (item in freq) {
if (freq[item] > compare) {
compare = freq[item]
mode = item
}
}
console.log(parseInt(mode))
}
getMostFrequent([1,1,3,3,2,2,5,5,5,3,3,3,3]);

答案 0 :(得分:3)
这是你所指的部分:
var compare = 0;
var mode;
for (item in freq) {
if (freq[item] > compare) {
compare = freq[item];
mode = item;
}
}
这计算所有freq[item]
中的最大值。将变量compare
重命名为maximum
可能更好,因为这就是它最后的结果。
if
条件仅适用于大于该最大值的频率(freq[item]
),因此compare
被设置为更大的频率值。换句话说,compare
是到目前为止看到的所有freq[item]
的最大freq[item]
。
最后一个语句将是mode = item;
,只会调用最后一个最大频率(这是最大值),这会将mode
设置为最常见的item
。< / p>
答案 1 :(得分:1)
见下面的评论。希望它有所帮助。
function getMostFrequent(arr) {
// freq starts empty
var freq = {}
// then we start to check every item on arr, our data
for (item of arr) {
// is there any attribute on freq called item?
// ex: freq[2] is there?
// if yes, increment it.
// if not, set it to 1, it's the first time we met him.
freq[item] ? freq[item]++ : freq[item] = 1
}
// compare starts at the lowest value,
// assuming only positive numbers.
var compare = 0
// we don't know the mode yet. keep it undefined.
var mode
// now we loop every attribute present in freq.
for (item in freq) {
// have we counted freq[item] more times
// than the actual value of compare?
if (freq[item] > compare) {
// if yes, we store that number on compare
compare = freq[item]
// also, item (which is a number too!) is, as far as we know,
// our mode.
mode = item
}
// loop shall repeat untill we check every atribute inside freq
}
// and finally we print mode, since it must the the mode
console.log(parseInt(mode))
}
// call the function passing sample data
getMostFrequent([1,1,3,3,2,2,5,5,5,3,3,3,3]);