我有一个代码块,用于计算字符串中重复字母的数量,并返回一个名为uniques的字符串(基本上是按字母顺序输入的字符串,没有特殊字符)。这是我的代码:
function removeDuplicates(str){
if(typeof(str) != 'string'){
return `${str} Is not a string`;
}
var main = str.toLowerCase();
var count = main.length;
var letters = [];
var remnants = [];
var sorted;
var duplicates = 0;
var result = {};
for(i=0; i <= count - 1; i++){
var letter = main[i];
letters.push(letter);
}
function countInArray(array, x){
var noOfItems = array.filter(one => one == x).length;
if (noOfItems > 1 || noOfItems < 1){
duplicates++;
var y = x.slice(0, -1)
remnants.push(y);
} else {
var remnant = remnants.push(x);
var joined = remnants.join('');
function sortAlphabets(text) {
return text.split('').sort().join('');
}
var temp = sortAlphabets(joined);
var sorted = temp.replace(/[^a-zA-Z ]/g, "")
result['uniques'] = sorted;
result['duplicates'] = duplicates / 2;
console.log(result);
}
}
letters.forEach(item => {
countInArray(letters, item);
});
}
解决方案应该如下所示:{uniques: 'aehlstx', duplicates: 2}
当我运行removeDuplicates('th#elex_ash?')
时,
但我的代码打印出来:
{ uniques: 't', duplicates: 0 }
{ uniques: 't', duplicates: 0.5 }
{ uniques: 'lt', duplicates: 1 }
{ uniques: 'ltx', duplicates: 1.5 }
{ uniques: 'ltx', duplicates: 1.5 }
{ uniques: 'altx', duplicates: 1.5 }
{ uniques: 'alstx', duplicates: 1.5 }
{ uniques: 'alstx', duplicates: 2 }
我想它是letter.forEach()
部分,但我没有看到任何其他方式迭代数组(没有触发类似的问题)。
答案 0 :(得分:1)
有两个主要问题:
console.log
中呼叫forEach
。在循环之后移动它。else
块,并且它不会包含在结果中。但是,您可以大大简化代码:
function removeDuplicates(str) {
str = str.replace(/[^a-zA-Z ]/g, "").toLowerCase().split("").sort();
var setOfLetters = {};
var resultingStringArray = [];
var duplicateCount = 0;
for (var char of str) {
var count = setOfLetters[char] || 0;
if (count === 0) {
resultingStringArray.push(char);
setOfLetters[char] = 1;
}
else {
if (count === 1) {
duplicateCount++; // this will count the duplicate once ("aaabb" -> 2 duplicates)
}
setOfLetters[char]++;
}
}
return {
"uniques": resultingStringArray.join(""),
"duplicates": duplicateCount
};
};
console.log(removeDuplicates('th#elex_ash?'));
&#13;