字符串拆分并计算出现次数

时间:2012-12-15 15:47:32

标签: javascript jquery string split

我有一个字符串

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

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

6 个答案:

答案 0 :(得分:6)

首先,你需要将你的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/>' );        
} ​

答案 1 :(得分:5)

我建议如下:

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

参考文献:

答案 2 :(得分:2)

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

的对象

创建对象:

{
 "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'];

DEMO:http://jsfiddle.net/25hBV/1/

答案 3 :(得分:1)

将字符串拆分成一个数组,将数组放入一个对象中会处理重复项,并将出现的数据计算为对象中的键/值对,请参阅小提琴!

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 :(得分:1)

如果你想要简短而甜蜜的话:

// 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

答案 5 :(得分:1)

现在有一天可以做

    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);