理解JavaScript模式功能

时间:2018-01-21 21:21:48

标签: javascript logic

通过贡献,我设法找到编写函数的代码来查找给定数字集的模式。我试图准确理解该函数的作用,但我陷入了函数的一部分。

我试过控制台记录所有内容,但我无法理解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]);




2 个答案:

答案 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]);