首页 > 解决方案 > 取一个字符串,评估它并查找是否有一个数字并重复部分字符串该次数?

问题描述

我正在编写代码并遇到了这个问题,你有一个特定的字符串,它是这种形式:

 d ae2 n s

现在我们必须以特定的方式对此进行解码,

  1. 用空格将其拆分为不同的部分,形成一个类似 ["d","ae2","n","s"] 的数组

  2. 评估数组的每个元素并找出其中是否有数字。

  3. 如果有数字,则重复该字符串的次数。

  4. 将其添加到数组中并继续。所以输出数组应该是

["d","ae","ae","n","s"]

我已经尝试了很多但一无所获

我之前使用过这段代码,但它以第二个字符串结尾:

var str = "d ae2 n s"
var res = str.split(" ");
alert(res.length);
for(var x = 0; x < res.length; x++ ){
  var std = res[x];
  var fun = checkNum(std);
  if(fun === true){
   var numbers = str.match(/\d+/g).map(Number);
    var index = res.indexOf(std);
   var result =  std.replace(/[0-9]/g, '');
    var res2 = result.repeat(numbers);
   res[index] = res2;
  }
  else{
    continue;
  }

 for(var i = 0; i < res.length; i++ ){
   console.log(res[x]);
 }
}
function checkNum(t){ 
return /\d/.test(t);
}
// I am a terible coder :/

预期输入:d ae2 ns

预期输出:["d","ae","ae","n","s"]

标签: javascript

解决方案


使用方法fill()flatMap()

正则表达式替换

  • /[^0-9]/- 所有非数字字符

  • /[0-9]/- 所有数字字符

var str = 'd ae2 n s'

var res = str
  .split(' ')
  .flatMap(i =>
    Array(+i.replace(/[^0-9]/g, '') || 1)
    .fill(i.replace(/[0-9]/g, ''))
  )

console.log(res)


推荐阅读