Javascript 函数对字符串中的重复字符进行计数

Javascript 函数对字符串中的重复字符进行计数,javascript,object,duplicates,Javascript,Object,Duplicates,我正在尝试编写一个函数,在提供的字符串中查找所有唯一字符 我希望函数以以下格式返回结果: removeDuplicates('th#elex_ash?') -> {unique: 'aehlstx', duplicates: 2} 到目前为止,我提出了以下尝试性解决方案: function removeDuplicates(str){ var unique =""; for (var i=0; i<str.length; i++){ if(uniqu

我正在尝试编写一个函数,在提供的字符串中查找所有唯一字符

我希望函数以以下格式返回结果:

removeDuplicates('th#elex_ash?') -> {unique: 'aehlstx', duplicates: 2}
到目前为止,我提出了以下尝试性解决方案:

function removeDuplicates(str){
    var unique ="";
    for (var i=0; i<str.length; i++){
        if(unique.indexOf(str[i]) == -1){
            unique += str[i];
        }
    }
    unique = unique.replace(/[&\/\\#,_+()$~%.'":*?<>]/g, '');
    return unique.split('').sort().join('');




}

console.log(removeDuplicates('aaabbbac'));
console.log(removeDuplicates('a'));
console.log(removeDuplicates('th#elex_ash?'));
函数移除副本(str){
var-unique=“”;
对于(var i=0;i
函数移除的副本(str){
var returnObject={
独特的:“,
副本:0
};
对于(变量i=0;i
你们很接近

对象可以像其他任何东西一样以Javascript返回;例如,要返回您要求的格式,只需执行以下操作:

return {
    unique: unique,
    duplicates: duplicates
} 
请注意变量名称与属性键的相同之处?您可以通过简单地编写
唯一的
重复的
,而不是
唯一的:唯一的
重复的:重复的
来使用速记法


您没有保留重复的计数。为此,只需将
else
块添加到
if(unique.indexOf(str[i])==-1)
条件中,仅当字符确实是重复字符时才应达到该条件,并增加一个计数器-让它命名为
duplicates


完整解决方案

函数移除副本(str){
var-unique=“”;
重复变量=0;
对于(变量i=0;iconsole.log(removeDuplicates(testString));
如果您是为一个可以使用较新javascript功能的环境编写的。这样做会更容易一些,因为它将强制内容之间的唯一性。您还可以将清理后的字符串的长度与唯一性进行比较,以找到重复计数

例如:

函数移除副本(str){
str=str.replace(/[&\/\\\\\\\\\\,+()$~%.“:*?]/g,”)
让unique=Array.from(新集合(str))
.sort((a,b)=>a.localeCompare(b))
.加入(“”)
让重复项=str.length-unique.length
返回{唯一,重复}
}

console.log(移除的副本(“th#elex_ash?”)
谢谢@pseudobbs,这正是我想要解决的问题!你能标记为正确还是向上投票吗?我是SO的新手,正在尝试建立声誉仍然存在问题Return对象应该有一个“uniques”字符串属性。Return对象应该有一个“duplicates”数字属性。“uniques”应该是“aehlstx”,所以请更改字符串p的名称从
unique
uniques
谢谢@PatrickRoberts-我知道这一点,只是没有思考。我会编辑…
return {
    unique: unique,
    duplicates: duplicates
}