计数字符串中重复字符的功能

时间:2018-08-12 02:59:13

标签: 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(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?'));

3 个答案:

答案 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
} 

请注意,变量名与属性键如何相同?您只需编写uniqueduplicates而不是unique: uniqueduplicates: 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));