Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组中的计数结果_Javascript_Arrays_Greasemonkey - Fatal编程技术网

Javascript 数组中的计数结果

Javascript 数组中的计数结果,javascript,arrays,greasemonkey,Javascript,Arrays,Greasemonkey,通过正则表达式和Greasemonkey,我得到了如下结果数组: choice1、choice2、choice3、choice3、choice1等 我的问题是,如果我不知道到底有多少个选项或它们是什么,我该如何统计这些选项,以便知道choice1在数组中的次数,choice2在数组中的次数,等等 最终目标是创建一个Greasemonkey脚本,该脚本存储每个选项在多个页面上获得的投票数(可能使用gm_setvalue,尽管我对其他想法持开放态度) 谢谢 不是100%确定你在找什么,但我想就是这个

通过正则表达式和Greasemonkey,我得到了如下结果数组:
choice1、choice2、choice3、choice3、choice1等

我的问题是,如果我不知道到底有多少个选项或它们是什么,我该如何统计这些选项,以便知道choice1在数组中的次数,choice2在数组中的次数,等等

最终目标是创建一个Greasemonkey脚本,该脚本存储每个选项在多个页面上获得的投票数(可能使用gm_setvalue,尽管我对其他想法持开放态度)


谢谢

不是100%确定你在找什么,但我想就是这个

  // Original data
    var choices = [
        "choice 1",
        "choice 1",
        "choice 2",
        "choice 3",
        "choice 3",
        "choice 3",
        "choice 3",
        "choice 3",
        "choice 3",
        "choice 4",
        "choice 4",
        "choice 4"];


    //Create the results array
    var result = new Object();

    for (var choice in choices) {
        if (result[choices[choice]] === undefined)
            result[choices[choice]] = 1;
        else
            result[choices[choice]]++;
    }

    //Print result
    var str = "";

    for (var item in result)
        str += item + ": " + result[item] + "<br />";


    document.getElementById("resultDiv").innerHTML = str;

一种技术是迭代选择并增加与对象属性中每个唯一选择相关联的计数器

例如:

var choiceCounts = {};
for (var iLoop=0; iLoop < aChoices.length; iLoop++) {
  var keyChoice = aChoices[iLoop];
  if (!choiceCounts[keyChoice]) {
    choiceCounts[keyChoice] = 1;
  } else {
    choiceCounts[keyChoice]++;
  } //if
} //for
var choiceCounts={};
for(var-iLoop=0;iLoop

然后,您将拥有一个属性等于该属性在数组中存在次数的对象。

首先对数组进行排序,然后您可以进行一次扫描以计数出现次数(类似于Ryan的上述建议)。

一些建议:-请注意,“result”var实际上应该是一个对象,而不是一个数组,因为在数组中使用对象属性常常会使事情变得混乱。-在使用for..in构造时使用hasOwnProperty是一种很好的做法。-for..in构造可能不会像您在“choices”数组上预期的那样工作。-if语句应该真正检查===undefined,而不是依赖(undefined==null)为true。
var choiceCounts = {};
for (var iLoop=0; iLoop < aChoices.length; iLoop++) {
  var keyChoice = aChoices[iLoop];
  if (!choiceCounts[keyChoice]) {
    choiceCounts[keyChoice] = 1;
  } else {
    choiceCounts[keyChoice]++;
  } //if
} //for