У меня есть блок кода, который предназначен для подсчета количества повторяющихся букв в строке и возврата строки, называемой unique (в основном это введенная строка в алфавитном порядке, без специальных символов).Вот мой код:
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()
, но я не вижу другого способа перебора массива (не вызывая подобных проблем).