JS字符串计数器

JS string counter

本文关键字:计数器 字符串 JS      更新时间:2023-09-26

我希望这段代码计算类别和消息在底部字符串中的次数,以及不同的 ID 号。代码只是给了我最后一个。

它很混乱,很糟糕。感谢您的帮助。

亲切问候。

counter = function() {
    var value = $('#text').val();
    if (value.length == 0) {
        $('#wordCount').html(0);
        return;
    }
    var regex = /'s+/gi;
    var wordCount = value.trim().replace(regex, ' ').split(' ').length;
};
$(document).ready(function() {
    var obj = {"data" : { 
                 "from": {
                    "category": "cat1",
                    "id": 1,
                    "message": "WIZ1"
                 },
                 "from": {
                    "category": "cat2",
                    "id": 2,
                    "message": "WIZ2"
                 },
                 "from": {
                    "category": "cat3",
                    "id": 3,
                    "message": "WIZ3"
                 },
                 "from": {
                    "category": "cat4",
                    "id": 4,
                    "message": "WIZ3"
                 },
                }
               };
        
    $.each(obj, function() {
      $.each(this, function(name, value) {
        $("#result").append(name + '=' + value.category);
      });
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="result">Words: <span id="wordCount">0</span>
    <br/>
</div>

您有一个对象,其中"from"属性被覆盖了4次。看起来你想要的是一个数组,就像下面的示例一样。

我还更改了代码以实际捕获类别和消息,就像您帖子中的描述一样,在循环之后,这些对象将按消息计数并按类别计数。

counter = function() {
    var value = $('#text').val();
    if (value.length == 0) {
        $('#wordCount').html(0);
        return;
    }
    var regex = /'s+/gi;
    var wordCount = value.trim().replace(regex, ' ').split(' ').length;
};
$(document).ready(function() {
    var obj = {"data" : [ 
                  {
                    "category": "cat1",
                    "id": 1,
                    "message": "WIZ1"
                 },
                {
                    "category": "cat2",
                    "id": 2,
                    "message": "WIZ2"
                 },
                  {
                    "category": "cat3",
                    "id": 3,
                    "message": "WIZ3"
                 },
                  {
                    "category": "cat4",
                    "id": 4,
                    "message": "WIZ3"
                 },
                ]
               };
     var categories = {};
      var messages = {}
    $.each(obj, function() {
      $.each(this, function(name, value) {
        if (!categories[value.category]) categories[value.category] = 0;
        categories[value.category] += 1;
               if (!messages[value.message]) messages[value.message] = 0;
        messages[value.message] += 1;
        $("#result").append(name + '=' + value.category);
      });
    });
  console.log(categories);
  console.log(messages);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="result">Words: <span id="wordCount">0</span>
    <br/>
</div>

JS 对象中的每个项目都有相同的键('from')。这导致每个覆盖前一个,这就是为什么它只找到最后一个。

{
  "data": {
    "from1": {
      "category": "cat1",
      "id": 1,
      "message": "WIZ1"
    },
    "from2": {
      "category": "cat2",
      "id": 2,
      "message": "WIZ2"
    },
    "from3": {
      "category": "cat3",
      "id": 3,
      "message": "WIZ3"
    },
    "from4": {
      "category": "cat4",
      "id": 4,
      "message": "WIZ3"
    }
  }
}

这将允许它循环访问每个项目,因为现在将有四个项目存在。