我正在尝试使RLE代码没有成功

时间:2019-04-24 11:34:04

标签: javascript

我正在尝试使用“行程编码”功能,并且卡在中间。

例如,我有一个字符串:"RRRTTTFBB",我正试图将其分隔为这种数组:["RRR", "TTT", "F", "BB"]

我只设法将元素放入数组的1个键中,例如:["RR" "R" "TT" "T" ....]

我已经尝试过使用while循环进行循环操作,例如,如果一个循环执行if / else切换,但是我不知道自己在做什么错。

function rleFunc(str) {
  let newArr = [];
  const strTrim = str.trim();
  const strUp = strTrim.toUpperCase();
  const arr = strUp.split("");
  const arrLength = arr.length;
  // Anyone has idea what to put here?? I'm lost
  return newArr;
}

4 个答案:

答案 0 :(得分:2)

另一种方法是使用带有.match的正则表达式来获取您想要的结果:

const str = "RRRTTTFBB";
console.log(str.match(/(.)\1*/g));

这可以通过以下表达式来实现:

  • (.):表示将任意字符分组
  • \1*:表示使用先前分组的字符并匹配零次出现的
  • /g:意味着对整个字符串(不仅是第一次出现的字符串)重复此模式

答案 1 :(得分:1)

 const result = [];
 let count = 1;

 const input = "RRRTTTFBB";

 for(let index = 1; index < input.length; index++) {
    if(input[index] !== input[index - 1]) {
      result.push(input[index - 1].repeat(count));
      count = 1;
     } else count++;
 }

答案 2 :(得分:1)

const groups = arr.slice(0, 1)

for (const char of arr.slice(1)) {
  const lastGroup = groups[groups.length - 1]

  if (char === lastGroup[0]) {
    lastGroup += char
  } else {
    groups.push(char)
  }
}

答案 3 :(得分:0)

我建议不要对琐碎的任务使用正则表达式,除非必须这样做。同样,如果要评估的字符串是用户输入。它可能导致节点中的阻塞操作。在这里阅读:https://nodejs.org/en/docs/guides/dont-block-the-event-loop/

arr="RRRRTTHHHJJJHHJ"
    const map = new Map;
    for (const char of arr.split('')) {
  
    if (map.has(char)) {

    map.set(char, map.get(char)+char)
    } else {
    map.set(char, char)
    }
    }
    console.log([...map.values()]);