计算JavaScript中句子(数组)中字符(数组)的出现次数
count occurrence of char(array) in sentences(array) in JavaScript
我们如何找到并计算以下句子中的出现次数?
sentences = [
'black im yello'
'green black and white'
'green green green green green greenana'
'i have no color'
]
find_char = [
'green',
'black',
'white'
]
应返回
output = {
'sentence 1' : 1 // just black
'sentence 2' : 3 // green black white
'sentence 3' : 6 // 5 green and green in 'green'ana
'sentence 4' : 0
}
这是我当前的代码
var output = {};
for (var i = sentences.length - 1; i >= 0; i--) {
var output_tmp = {};
var occurance = 0;
for (x = 0; x < find_char.length; x++) {
j = 0;
output_tmp[find_char[x]] = 0;
// search if sentences then -1, if > -1 then there is a match
while ((j = sentences[i].indexOf(find_char[x], j)) > -1) {
output_tmp[find_char[x]]++;
j++
}
occurance += output_tmp[find_char[x]];
}
output[i] = { 'sentence_no': i, 'occurance' : occurance};
}
有更好的方法吗?
将所有单词组合成一个正则表达式,并将其应用于每个句子:
sentences = [
'black im yello',
'green black and white',
'green green green green green greenana',
'i have no color'
]
words = [
'green',
'black',
'white'
]
re = new RegExp(words.join('|'), 'gi')
counts = sentences.map(function(sent) {
return (sent.match(re) || []).length
})
这在控制台中打印:
[1, 3, 6, 0]
您可以使用Javascript的匹配方法来优化代码。例如,要查找句子中出现的"绿色"的数量,可以使用表达式
sentences[i].match(/green/g).length)
所以你的代码看起来像
for( s in sentences ){
var occurences = 0;
for( f in find_char )
occurences += (sentences[s].match(new RegExp(find_char[f], "g")) || []).length
output[s] = { 'sentence_no': s, 'occurance' : occurences};
}
相关文章:
- 从指定范围创建字符数组
- 第一个字第一个字符第二个字第二个字符,一直到数组结束
- 正在转义javascript数组中的html字符
- 为什么Angularjs服务返回的是字符数组而不是对象数组
- 将组成单词的字符添加到数组的开头
- 用javascript将字符串连接到数组中
- Javascript在数组中循环搜索字符
- 用Objective-C将JSON解析成C风格的字符数组
- 如何从数组中过滤掉非日语字符
- Google Web App 将单元素数组视为单个字符的数组
- 将字符串拆分为具有固定字符数的数组
- 使用字符串数组中的字符填充 HTML 表
- JavaScript删除URL数组中字符之前的所有内容
- 按字母顺序、数字顺序和特殊字符对字符串数组进行排序
- 在数组中的偶数之间插入连字符
- 按第一个字符进行数组搜索
- 如何将外来字符(例如æ)从PHP数组传递到javascript数组
- 打破ng中的字符数组,重复并设置每个字符自己的输入标记
- 用Javascript替换从JSON中获取的数组数据特殊字符
- 计算JavaScript中句子(数组)中字符(数组)的出现次数