为什么 'duplicates' 属性 一直返回 3 而不是 2?

Why does 'duplicates' property keeps returning 3 instead of 2?

本人承担的任务如下:

该函数应该被称为 removeDuplicates 并且应该 return 一个包含 'uniques' 属性 的对象文字,它应该是排序的输入字符串,但没有任何重复或特殊字符。 returned 对象还应该有一个 'duplicates' 属性,它应该表示删除的重复字符总数。 所以: 删除重复项('th#elex_ash?') 应该 return: {唯一:'aehlstx',重复:2}

这是我的代码:

function removeDuplicates(str) {
    var stg = str.split("");
    var nstr = [];
    var allowed = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
    var count = 0;
    for(var i = 0; i<stg.length;i++){
        if(nstr.indexOf(stg[i])== -1){
            if(allowed.indexOf(stg[i]) > -1){
                nstr.push(str[i])
            }
            else{
                count +=1;
            }
        }
    }
    return{uniques: nstr.sort().join(""),duplicates: count}

}

但结果 returns {uniques: 'aehlstx', duplicates: 3} 相反。

因为你计算的是不允许的字符:)

您首先检查您之前是否见过该字符,然后检查它是否是允许的字符并计算您看到不允许的字符的次数。 你需要检查这个字符是否被允许,然后看看你以前是否见过它。