我有一段代码,用于计算字符串中重复字母的数量,并返回一个名为 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()
部分,但我没有看到任何其他方法来遍历数组(不会触发类似问题)。
最佳答案
主要有两个问题:
- 您正在
forEach
中调用console.log
。在循环之后移动它。 - 当您识别出重复项时,您不会将其从数组中删除,因此您永远不会为该字母输入
else
block ,并且它不会包含在结果中。
但是,您可以大大简化您的代码:
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?'));
关于javascript - 从 console.log 中删除多余的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50709322/