我正在尝试使用“行程编码”功能,并且卡在中间。
例如,我有一个字符串:"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;
}
答案 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()]);