我正在尝试编写一个函数,以查找提供的字符串中的所有唯一字符。
我希望函数以以下格式返回结果:
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?'));
答案 0 :(得分:1)
如果您正在写一个可以使用较新的javascript功能的环境。 Set
使此操作变得容易一些,因为它将强制内容之间的唯一性。您还可以将清除后的字符串的长度与唯一性进行比较,以找到重复计数
例如:
function removeDuplicates(str){
str = str.replace(/[&\/\\#,_+()$~%.'":*?<>]/g, '')
let unique = Array.from(new Set(str))
.sort((a, b) => a.localeCompare(b))
.join('')
let duplicates = str.length - unique.length
return {unique, duplicates}
}
console.log(removeDuplicates("th#elex_ash?"))
答案 1 :(得分:0)
function removeDuplicates(str) {
var returnObject = {
unique : "",
duplicates : 0
};
for (var i = 0; i < str.length; i++){
if (returnObject.unique.indexOf(str[i]) < 0) {
returnObject.unique += str[i];
} else {
returnObject.duplicates++;
}
}
returnObject.unique = returnObject.unique.replace(/[&\/\\#,_+()$~%.'":*?<>]/g, '');
returnObject.unique = returnObject.unique.split('').sort().join('');
return returnObject;
}
console.log(removeDuplicates('aaabbbac'));
console.log(removeDuplicates('a'));
console.log(removeDuplicates('th#elex_ash?'));
答案 2 :(得分:0)
您非常亲密!
与其他任何对象一样,可以使用Javascript返回对象;例如,要返回您要求的格式,只需执行以下操作:
return {
unique: unique,
duplicates: duplicates
}
请注意,变量名与属性键如何相同?您只需编写unique
和duplicates
而不是unique: unique
和duplicates: duplicates
即可使用速记符号。
您没有保留重复项的数量。为此,只需在您的else
条件中添加一个if(unique.indexOf(str[i]) == -1)
块(仅当一个字符确实是重复字符时才应到达),并增加一个计数器-将其命名为duplicates
。 / p>
完整解决方案
function removeDuplicates(str) {
var unique = "";
var duplicates = 0;
for (var i = 0; i < str.length; i++) {
if (unique.indexOf(str[i]) == -1) {
unique += str[i];
} else {
duplicates++;
}
}
unique = unique.replace(/[&\/\\#,_+()$~%.'":*?<>]/g, '').split('').sort().join('')
return {
unique,
duplicates
}
}
const testString = 'th#elex_ash?';
const expectedOutput = {
unique: 'aehlstx',
duplicates: 2
};
console.log(removeDuplicates(testString));