数组中的模式

时间:2016-11-20 18:15:32

标签: javascript mode

我正在尝试编写代码来查找数组中的模式。以下是我的逻辑。我该如何改进它是否正确?

var list = [2, 3, 6, 10, 10, 3];
var mode = function(values) {
  function compare(a, b) {
    return a - b;
  };

  values.sort(compare);

  for (i = 0, j = 1; i < list.length, j < list.length + 1; i++, j++) {
    if (list[i] == list[j]) {
      console.log(" Its a Mode");
    }
    else {
      console.log("not a mode");
    }
  }
}

mode(list);

如果ij的值到达数组的末尾,会出现什么情况?

1 个答案:

答案 0 :(得分:0)

嗯,好几件事。首先,你的逻辑实际上并没有产生列表的模式,只是列表中重复的任何数字。如果您有:[1,2,3,3,3,4,4,5,5,6]那么3,4和5都会报告为模式,即使在这种情况下3是实际模式。此外,您实际上没有返回任何内容或积累任何内容,您只需将语句记录到控制台,甚至不会告诉您找到的数字(因此在调试时甚至没用)。

其次,循环不正确。结束循环的条件不能用逗号连接,整个语句必须评估为一个真或假的结果。

小点,你的循环变量没有被正确声明,如果你计划在别处使用它们,这将导致你不想要的行为。

如果我真的想要找到模式,我可能会构造一个对象,其中键是列表值,值是出现次数。然后,您可以将出现次数最多的那个作为模式。

使用您的列表的对象将类似于

{"2" : 1, "3": 2, "6": 1, "10" : 2}

这是多模态的,有3和10.