【问题标题】:Count duplicated symbols in string and group them using Javascript计算字符串中重复的符号并使用 Javascript 对它们进行分组
【发布时间】:2018-08-08 18:44:02
【问题描述】:

我需要创建一个执行文本压缩的函数。函数接受一个参数x - text,返回由字符组成的文本,连续重复计数。

示例

x = "aaavvvfdff"

输出

a3v3f1d1f2

我试过这段代码:

const randomText = 'aaavvvfdff'

function getTextCompression(x) {
  const chars = x.split('')

  const duplicatesCount = chars.reduce((count, char) => {
    count[char] = (count[char] || 0) + 1;
    return count;
  }, {});

  console.log(duplicatesCount)
}

getTextCompression(randomText);

得到输出:{ a: 3, v: 3, f: 3, d: 1 }

不知道下一步该做什么或者是好方法吗?

那么如何编写一个返回该输出的函数呢?

【问题讨论】:

  • SO 不是“如何做”问题的地方。你应该自己做研究,用尽所有可用资源。在这里发布问题是最后的手段,它必须包含自己解决这个问题的尝试。
  • 使用 for 循环迭代字符串中的字符,如果下一个字符与前一个字符匹配,则使用整数计数值进行计数,然后将此字母及其计数附加到要返回的新字符串中,如果下一个字符与前一个字符不匹配,重置计数并将 temp 更改为新字符。
  • 你已经尝试了什么?如果您不展示您迄今为止所做的尝试,我们将无法帮助您。

标签: javascript string duplicates grouping


【解决方案1】:

你可以使用一个简单的正则表达式和一个String.prototype.replace()来实现这个功能,也就是一个run-length encoding

function rle (str) {
  return str.replace(/([^])\1*/g, (match, p) => `${p}${match.length}`)
}

let x = 'aaavvvfdff'

console.log(rle(x))

为了好玩,我将使用类似的方法抛出一个反函数:

function rld (str) {
  return str.replace(/([^])(\d+)/g, (_, p1, p2) => p1.repeat(p2))
}

let x = 'a3v3f1d1f2'

console.log(rld(x))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    相关资源
    最近更新 更多