首页 > 解决方案 > 从 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()一部分,但我没有看到任何其他方式来迭代数组(不会触发类似的问题)。

标签: javascriptarraysnode.jsfunction

解决方案


有两个主要问题:

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


推荐阅读