javascript - 从 console.log 中删除多余的对象

标签 javascript arrays node.js function

我有一段代码,用于计算字符串中重复字母的数量,并返回一个名为 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() 部分,但我没有看到任何其他方法来遍历数组(不会触发类似问题)。

最佳答案

主要有两个问题:

  1. 您正在 forEach 中调用 console.log。在循环之后移动它。
  2. 当您识别出重复项时,您不会将其从数组中删除,因此您永远不会为该字母输入 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/

相关文章:

javascript - 忽略模糊匹配并使用 javascript 添加精确的单词模式匹配

javascript - Javascript 中 reduce 方法的奇怪行为

Javascript 数组排序改变索引

node.js - 使用 node.js/socket.io 构建实时大型多人游戏有多昂贵?

javascript - Node.js - 我将如何转发 HTTP 流量(反向代理)?

javascript - 不能在 const 声明中使用 if 语句,但三元运算符有效

javascript - 匹配字符串的正则表达式包含右括号

javascript - 在函数内部创建的对象不起作用,但传入的对象可以

javascript - 图像的宽度不会增长到等于父 div 的宽度

arrays - 如何正确地将某些内容追加到数组中?