JS字符串计数器

时间:2015-01-29 21:23:13

标签: javascript

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

非常混乱,sry。谢谢你的帮助。

亲切的问候。



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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

JS对象中的每个项都具有相同的键(&#39;来自&#39;)。 这导致每个人覆盖前一个,这就是为什么它只找到最后一个。

&#13;
&#13;
{
  "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"
    }
  }
}
&#13;
&#13;
&#13;

这将允许它遍历每个项目,因为现在将有四个项目。

答案 1 :(得分:0)

你有一个单一的对象,&#34;来自&#34;财产被覆盖4次。看起来你想要的是拥有一个数组,如下例所示。

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

&#13;
&#13;
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);
});
&#13;
<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>
&#13;
&#13;
&#13;