Javascript 字符串拆分并计算出现次数以及
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/13893634/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
String split and count the number of occurrences and also
提问by Chetan
I have a string
我有一个字符串
var stringIHave = "Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$";
How to get the count of the number of occurrences of each entry, The occurrence I get, is from a JSON like Java = 8 and etc...
如何获取每个条目出现次数的计数,我得到的出现次数来自像 Java = 8 等的 JSON...
采纳答案by Pawan Singh
Now a days you can do
现在一天你可以做
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);
回答by antyrat
First of all you need to split your srting to array:
首先,您需要将 srting 拆分为数组:
var keywordsArr = stringIHave.split( '$$' );
then you need to have an object for example to store counts:
那么你需要有一个对象来存储计数:
var occur = {};
and then just create simple for loop to count all occurrences:
然后只需创建简单的 for 循环来计算所有出现的次数:
for( var i = 0; i < keywordsArr.length; i++ ) {
occur[ keywordsArr[ i ] ] = ( occur[ keywordsArr[ i ] ] || 0 ) + 1;
}
now your object occurwill have names as keys and count as values.
现在您的对象occur将名称作为键并计为值。
See jsFiddle demo.
参见 jsFiddle演示。
Also as you have at end of your string $$you maybe will need to remove last item from keywordsArrso just do after splitfunction call:
同样,正如您在字符串末尾所做的那样,$$您可能需要从中删除最后一项,keywordsArr因此只需在split函数调用后执行:
keywordsArr.pop();
See demowithout last element.
请参阅没有最后一个元素的演示。
So final code will be like:
所以最终的代码将是这样的:
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/>' );
} ?
回答by David says reinstate Monica
I'd suggest the following:
我建议如下:
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$$", '$$'));
?
References:
参考:
回答by charlietfl
It's not entirely clear what final objective is. Following creates an object from string that looks like
目前尚不完全清楚最终目标是什么。以下从字符串创建一个对象,看起来像
Object created:
创建的对象:
{
"Java": 8,
"jQuery": 4,
"Hibernate": 1,
"Spring": 1,
"Instagram": 1
}
JS:
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]]++;
}
}
You can loop over the object to get all values or simply look up one value
您可以遍历对象以获取所有值或仅查找一个值
var jQueryOccurences= obj['jQuery'];
回答by closure
回答by adeneo
Split the string into an array, and putting the array into an object takes care of duplicates and counts occurences as key/value pairs in the object, see fiddle!
将字符串拆分为一个数组,并将该数组放入一个对象中会处理重复项并将出现次数作为对象中的键/值对进行计数,请参阅小提琴!
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

