6

私は文字列を持っています

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

各エントリの出現回数のカウントを取得する方法、私が取得する出現は、Java=8などのJSONからのものです...

4

6 に答える 6

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デモを参照してください。

また、文字列の最後に$$あるように、最後の項目を削除する必要があるかもしれないので、関数呼び出しkeywordsArrの後に行うだけです:split

keywordsArr.pop();

最後の要素のないデモを参照してください。

したがって、最終的なコードは次のようになります。

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/>' );        
} ​
于 2012-12-15T15:56:10.263 に答える
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フィドルデモ

参照:

于 2012-12-15T15:58:33.093 に答える
3

最終的な目的が何であるかは完全には明らかではありません。以下は、次のような文字列からオブジェクトを作成します

作成されたオブジェクト:

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

    }
}

オブジェクトをループしてすべての値を取得するか、単に 1 つの値を検索することができます

var jQueryOccurences= obj['jQuery'];

デモ: http://jsfiddle.net/25hBV/1/

于 2012-12-15T16:07:29.677 に答える
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

フィドル

于 2012-12-15T16:00:36.023 に答える
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;

デモ

于 2012-12-15T16:46:14.243 に答える
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);

于 2018-07-29T10:15:52.740 に答える