首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从console.log中删除多余的对象

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

Stack Overflow用户
提问于 2018-06-06 05:39:11
回答 1查看 140关注 0票数 1

我有一段代码,它的目的是计算字符串中重复字母的数量,并返回一个名为唯一的字符串(基本上是按字母顺序输入的字符串,不含特殊字符)。下面是我的代码:

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);
  });
}

解决方案应该是这样的:当我运行removeDuplicates('th#elex_ash?')时,使用{uniques: 'aehlstx', duplicates: 2}

但我的代码打印如下:

{ 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()部分,但我看不到任何其他迭代数组的方法(不会触发类似的问题)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-06 06:08:10

主要有两个问题:

你正在调用forEach中的console.log。将其移动到循环之后。

  • 当您识别重复项时,您不会将其从数组中删除,因此您永远不会为该字母输入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?'));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50709322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档