计算每个角色的外观

tek*_*tiv 6 javascript jquery

我目前正在研究密码强度计算器,然后我需要知道一个角色是否出现不止一次.
我知道我必须regex像这样使用occurance = password.match(/a/g).length很多次a,但我想用每个字符(字母,数字,符号)来做.

有没有办法使用JS/JQuery,也许是正则表达式,除了使用包含我想要测试的所有字符的数组?

Pit*_*tel 8

像这样的东西?

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);
Run Code Online (Sandbox Code Playgroud)

结果:

{ H: 1, e: 1, l: 3, o: 2, ' ': 1, w: 1, r: 1, d: 1 }
Run Code Online (Sandbox Code Playgroud)

或者你可以使用数组.只需{}改为[].

  • 谢谢,这就像我想要的那样!顺便说一下,我正在使用一个字符串,所以`{}`很好.此外,您可以使用`histogram [letter] =(histogram [letter] || 0)+ 1`而不是`if/else`条件.根据你喜欢的 (2认同)

Sla*_*anX 5

从@Noel何塞的答案在这里,你可以简单地将字符串转换为数组后运行该功能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]);
}
Run Code Online (Sandbox Code Playgroud)

传入'测试'将导致以下输出:

e : 1
g : 1
i : 1
n : 1
s : 1
t : 2
Run Code Online (Sandbox Code Playgroud)