【问题标题】:String split and count the number of occurrences and also字符串拆分并计算出现次数以及
【发布时间】:2012-12-03 08:05:41
【问题描述】:

我有一个字符串

var stringIHave = "Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$";

如何获取每个条目的出现次数,我得到的出现次数来自 Java = 8 等 JSON 等...

【问题讨论】:

标签: javascript jquery string split


【解决方案1】:

首先你需要将你的 srting 拆分为数组:

var keywordsArr = stringIHave.split( '$$' );

那么你需要一个对象来存储计数:

var occur = {};

然后只需创建简单的 for 循环来计算所有出现次数:

for( var i = 0; i < keywordsArr.length; i++ ) {
    occur[ keywordsArr[ i ] ] = ( occur[ keywordsArr[ i ] ] || 0 ) + 1;
}

现在您的对象 occur 将名称作为键并计为值。

见 jsFiddle demo

正如您在字符串末尾的$$ 一样,您可能需要从keywordsArr 中删除最后一项,所以只需在split 函数调用之后执行:

keywordsArr.pop();

demo 没有最后一个元素。

所以最终的代码会是这样的:

var stringIHave = "Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$",
  keywordsArr = stringIHave.split( '$$' ),
  occur = {};

keywordsArr.pop();

for( var i = 0; i < keywordsArr.length; i++ ) {
    occur[ keywordsArr[ i ] ] = ( occur[ keywordsArr[ i ] ] || 0 ) + 1;
}

for( var key in occur ) {
    document.write( key + ' - ' + occur[key] + '<br/>' );        
} ​

【讨论】:

  • 这是在令人沮丧的最后 6 小时后帮助我获得计数或重复的唯一答案。我有一个字符串数组,我必须将它们连接在一起,然后使用您的逻辑能够找出完整字符串中的重复单词。我确信这可能是太多的开销,但我现在只是松了一口气,得到一个解决方案。
【解决方案2】:

我建议如下:

function stringCount(haystack, needle) {
    if (!needle || !haystack) {
        return false;
    }
    else {
        var words = haystack.split(needle),
            count = {};
        for (var i = 0, len = words.length; i < len; i++) {
            if (count.hasOwnProperty(words[i])) {
                count[words[i]] = parseInt(count[words[i]], 10) + 1;
            }
            else {
                count[words[i]] = 1;
            }
        }
        return count;
    }
}

console.log(stringCount("Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$", '$$'));
​

JS Fiddle demo.

参考资料:

【讨论】:

    【解决方案3】:

    将字符串拆分为一个数组,并将该数组放入一个对象中处理重复项并将出现次数作为对象中的键/值对进行计数,参见小提琴!

    var stringIHave = "Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$",
        s = stringIHave.split('$$');
        obj = {};
    
    for (var i=s.length; i--;) {
        obj[s[i]] = (s[i] in obj) ? obj[s[i]]+1 : 1;
    }
    
    //    obj.Java == 8
    

    FIDDLE

    【讨论】:

      【解决方案4】:

      最终目标是什么并不完全清楚。以下从字符串创建一个对象,看起来像

      对象创建:

      {
       "Java": 8,
       "jQuery": 4,
       "Hibernate": 1,
       "Spring": 1,
       "Instagram": 1
      }
      

      JS:

      var str = 'Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$';
      var arr = str.split('$$')
      var obj = {};
      
      for (i = 0; i < arr.length; i++) {
          if (arr[i] != '') {
              if (!obj[arr[i]]) {
                  obj[arr[i]] = 0;
              }
              obj[arr[i]]++;
      
          }
      }
      

      您可以遍历对象以获取所有值或仅查找一个值

      var jQueryOccurences= obj['jQuery'];
      

      演示:http://jsfiddle.net/25hBV/1/

      【讨论】:

        【解决方案5】:

        如果你想要它简短而甜美:

        // variable declarations
        var arParts = stringIHave.match(/\w+/g), 
            result = {}, 
            i = 0, 
            item;
        
        // Copy the array to result object      
        while (item = arParts[i++]) result[item] = (result[item] || 0 ) + 1;
        

        demo

        【讨论】:

          【解决方案6】:

          现在你可以做的一天

              const str = "Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$";
              
              var result = str.split("$$").reduce(function(acc, curr) {
              curr &&  (acc[curr] = (acc[curr] + 1) || 1);
              	return acc
              }, {});
              console.log(result);

          【讨论】:

            猜你喜欢
            • 2019-08-23
            • 1970-01-01
            • 1970-01-01
            • 2012-06-24
            • 2014-04-24
            • 2015-06-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多