【问题标题】:Counting Results in an Array计算数组中的结果
【发布时间】:2023-03-03 22:36:01
【问题描述】:

通过正则表达式和 Greasemonkey,我得到了一组结果,如下所示:
choice1, choice2, choice3, choice3, choice1, etc..

我的问题是,如果我不确切知道有多少选择或它们是什么,我如何计算选择,以便我知道选择 1 在数组中的次数、选择 2 在数组中的次数等。

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

谢谢!

【问题讨论】:

    标签: javascript arrays greasemonkey


    【解决方案1】:

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

    例子:

    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
    

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

    【讨论】:

      【解决方案2】:

      不是 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;
      

      输出:

      choice 1: 2
      choice 2: 1
      choice 3: 6
      choice 4: 3
      

      【讨论】:

      • 一些建议: - 请注意,“结果”变量实际上应该是一个对象,而不是一个数组,因为在数组上使用对象属性经常会造成混淆。 - 在使用 for..in 构造时使用 hasOwnProperty 是一种很好的做法。
      • - for..in 结构在“choices”数组上可能无法正常工作。 - if 语句应该真正检查 === undefined,而不是依赖 (undefined == null) 为真。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-30
        • 1970-01-01
        • 1970-01-01
        • 2021-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多