首页 > 解决方案 > 如何使用过滤器方法删除特定数字?

问题描述

我目前一直在解决这个算法问题。我需要将一个字符串减少到任何连续重复的字母都打印一次,它们的次数连续重复等等。例如,如果输入为 abc,则输出应为 abc,但如果输入为 aabccbb,则输出应为 a2bc2b2。我编写的算法处理重复,但如果我的输入是 abc,那么它返回 a1b1c1 而不是 abc。我想知道我是否可以只使用 filter 方法来返回任何不 = 为 1 的值,但我不确定如何。关于以更好的方式解决此问题的任何建议?

const tester = (message) => {
    // track current string
    let answer = '';
    // track count of letter
    let count = 0;
    // loop through string
    for (let i = 0; i < message.length; i++) {
    // increase count
      count++;
    // find out if current letter and proceeding letter match
      if (message[i] != message[i+1]) {
    // update count and and push it to final string
        answer += message[i] + count;
    // reset count once proceeding letter doesn't match
        count = 0;
      }
    }
    return answer;
    
    
    
  }

  console.log(tester('abc'));

标签: javascript

解决方案


我更喜欢使用正则表达式 - 匹配并捕获一个字符,然后反向引用以尽可能多次匹配该字符,并替换为匹配数:

const tester = message => message.replace(
  /(.)\1*/g,
  (match, char) => char + (match.length > 1 ? match.length : '')
);
console.log(tester('aabccbb'));


推荐阅读