统计每个字符的出现次数
Count appearance of each character
我目前正在开发密码强度计算器,然后我需要知道一个字符是否多次出现
我知道我必须像使用occurance = password.match(/a/g).length
一样使用regex
来获得a
出现的次数,但我想对每个字符(字母、数字、符号(都这样做。
除了使用包含我想要测试的所有字符的数组之外,有没有其他方法可以使用JS/JQuery(可能是regex(来实现这一点?
类似的东西?
var hello = "Hello world";
var histogram = {};
for (var i = 0, len = hello.length; i < len; i++) {
var letter = hello[i];
histogram[letter] = (histogram[letter] || 0) + 1;
}
console.log(histogram);
结果:
{ H: 1, e: 1, l: 3, o: 2, ' ': 1, w: 1, r: 1, d: 1 }
或者您可以使用数组。只需将{}
更改为[]
即可。
根据@Noel Jose的答案,您可以在将字符串转换为数组string.split('')
后简单地运行此函数。
function foo(arr) {
var a = [], b = [], prev;
arr.sort();
for( var i = 0; i < arr.length; i++ ){
if ( arr[i] !== prev ) {
a.push(arr[i]);
b.push(1);
} else {
b[b.length-1]++;
}
prev = arr[i];
}
return [a, b];
}
var stringToCheck = 'password';
var result = foo(stringToCheck.split(''));
// result[0] contain unique array elements and result[1] contain number of occurrences of those elements
for(var i = 0; i < result[0].length; i++){
console.log(result[0][i] + " : " + result[1][i]);
}
通过"测试"将产生以下输出:
e : 1
g : 1
i : 1
n : 1
s : 1
t : 2
function rall(r, s) {
var a=[],t,g=r.global;
do {t=r.exec(s);if (!t) break;
a.push(t);} while (g);
return a;
}
var r=/.*?(.)(?=(.*?'1.*))/g;
var res=rall(r,password);
CCD_ 7将是包含所有重复字符匹配的数组的数组。
RegExp使用前瞻性来确定找到的字符(在第一组中捕获的(稍后是否会重新出现在字符串中。
像secret elements
这样的密码会显示为:
"[["s","s","ecret elements"],
["e","e","cret elements"],
["cre","e","t elements"],
["t","t"," elements"],
[" e","e","lements"],
["le","e","ments"]]"
每个子数组中的第二个元素是相乘匹配的字符。
如果没有重复,数组的长度将为0,这很容易测试,比如:
if (rall(r,password).length==0)
console.log('password is OK!');
如果你想使用"基于阵列"的解决方案,你可以尝试这样的方法:
var password= "abcdsa";
var freq = [];
for(var i = 0 ; i < password.length ; i++){
freq[password[i]] = (freq[password[i]] || 0)+1;
}
您对密码进行一次迭代,并跟踪您找到的每个字符的位置。在这种情况下,数组"freq"会有这样的东西:
freq["a"] = 2;
freq["b"] = 1;
freq["c"] = 1;
freq["d"] = 1:
freq["s"] = 1;
只需将字符串简化为count对象。用一个空对象作为减少的种子,每次遇到字母时,该字母在索引为字母的对象中都会收到+1。
制成可重复使用的功能
function charCount(str){
return [].reduce.call(str,function(p,c){
p[c] = p[c] ? p[c]+1 : 1;
return p;
},{});
}
charCount("hello");//Object {h: 1, e: 1, l: 2, o: 1}
相关文章:
- 在JavaScript中输出转义字符
- 不同浏览器中的空白字符正则表达式行为
- Regex匹配除“”之外的所有字符;.js”;
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 使用RegExp查找url中的字符
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 允许在文本框中使用某些字符
- 根据页面的位置突出显示文本中的字符
- 元素的内容必须由格式正确的字符数据或标记组成
- 如何将字符串拆分为字符,但在javascript中保留空格
- 使用Google Maps API向标记添加多个字符
- Java-彩票统计解析器
- 处理JSON字符串会导致JavaScript错误
- 单元格的工具提示或标题不显示超过2000个字符
- javascript替换换行符和特殊字符
- angularjs删除动态形式元素中的特殊字符
- 获取文本区域(单词、行、字符)的统计信息
- 统计字符串中的特殊字符
- 统计每个字符的出现次数