javascript - 从 console.log 中删除多余的对象
问题描述
我有一段代码,用于计算字符串中重复字母的数量,并返回一个名为 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()
一部分,但我没有看到任何其他方式来迭代数组(不会触发类似的问题)。
解决方案
有两个主要问题:
- 您正在调用
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?'));
推荐阅读
- c# - 在 C# 中创建和使用构造函数以及布尔方法
- python - 如何获取数据存储名称/id 列值
- javascript - 二html中具有相同属性的图层
- php - PHP文件在虚拟机中时连接MYSQL数据库
- mongodb - 如何更新 mongodb 中的子文档?
- react-router - 改变浏览器中 URL 的值,而不是要渲染的 React 组件
- java - 无法检查数组是否使用递归排序
- .net - ios 12 设备上的 facebook 身份验证问题
- javascript - 将downloadurl插入firebase数据库父节点web
- java - 获取一个带有 ajax 和内部参数的 form.jsp