javascript - 如何使用过滤器方法删除特定数字?
问题描述
我目前一直在解决这个算法问题。我需要将一个字符串减少到任何连续重复的字母都打印一次,它们的次数连续重复等等。例如,如果输入为 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'));
解决方案
我更喜欢使用正则表达式 - 匹配并捕获一个字符,然后反向引用以尽可能多次匹配该字符,并替换为匹配数:
const tester = message => message.replace(
/(.)\1*/g,
(match, char) => char + (match.length > 1 ? match.length : '')
);
console.log(tester('aabccbb'));
推荐阅读
- angular - 如何在页面初始化时翻译用 ngif 隐藏的文本?
- rocket.chat - 可以为 RocketChat 构建完整的自己的前端吗?
- android - 在颤动中英雄动画之后开始动画
- vunit - 我可以控制 VUnit 测试台的执行顺序吗?
- r - 通过R从文本中提取某个模式字符串
- reactjs - 登录后如何在上下文中保存用户
- python - 不要在结果创建方法 django rest 框架中获取字段
- heroku - Safari 中的“不允许请求资源”和 Firefox 中的“阻止加载混合活动内容”。Chrome 中的完美功能
- tomcat - javax.net.ssl.SSLException:收到致命警报:使用 jersey 1 客户端的意外消息
- mysql - 无法在 MySql 8.0 中复制用户或角色权限