我有一个按顺序排列的带有计数和字母的字符串我必须根据它们的计数打印字母

I have a string with counts and alphabets in ordered manner i have to print the alphabets according to their count

var input = `2
6
z2k1o2
6
m2v1p2`

var newInput = input.split("\n")
//console.log(newInput.length)
var input_arr = input.trim().split("\n")
var n = Number(input_arr[0])
//console.log(input_arr)

for (var i = 1; i < input_arr.length; i = i + 2) {
  var length = Number(input_arr[i])
  var string = input_arr[i + 1].trim()

}
//console.log(string)

var newstring = string
//console.log(newstring)
var alpha = []
var num = []
for (i = 1; i < string.length; i += 2) {
  num.push(string[i])
}
var newnum = num.map(Number)
//console.log(newnum)

for (i = 0; i < string.length; i += 2) {
  alpha.push(string[i])
}
var newalpha = (alpha)
//console.log(newalpha)
var answer = []
for (i = 0; i < newnum.length; i++) {

  for (j = 0; j < newnum[i]; j++) {
    answer.push(newalpha[i])
  }
}

console.log(answer.join(""))

这里我只有一个输出,你能解释一下为什么吗?你想分享解决这个问题的任何其他方法吗?

这是输入 z2k1o2,输出应该是 zzkoo 输入将遵循这种字母和计数模式..

我会用捕获成对的(字符,数字)并使用 .replace() 的函数替换模式来生成替换字符串的正则表达式来执行此操作。

> "a2b1c2".replace(/([a-z])([0-9]+)/ig, (_, a, b) => a.repeat(+b))
"aabcc"
>"pos2es2".replace(/([a-z])([0-9]+)/ig, (_, a, b) => a.repeat(+b))
"possess"

这是您 运行 错误所在:

for (var i = 1; i < input_arr.length; i = i + 2) {
  var length = Number(input_arr[i])
  var string = input_arr[i + 1].trim()

}

您正在遍历整个输入数组并保存每个长度和字符串,但每次读取时都会覆盖长度和字符串 - 仅保存最后一个长度和最后一个字符串,并且所以只处理/打印最后一个长度和最后一个字符串。