Javascript过程解压缩一串十进制数字

Javascript procedure to decompress a string of decimal digits

本文关键字:一串 十进制数字 过程 解压缩 Javascript      更新时间:2023-09-26

我刚开始学习JavaScript,我非常讨厌它。

我想要一个解压缩十进制数字字符串的过程,如下所示:

"301051"的意思是"3个零,一个1,一个0,然后5个1"

。"301051"——>"0001011111"

一个由1和0组成的字符串不会被改变(也不会有超过两个连续的0或1)

"01001100" -> "01001100"

我开始写了,但是我写的都是面条式的代码。

for (i = 0; i < thisString.length;)
{
  thisNum = thisString.charCodeAt(i);
  if (thisNum > 1)
  {
     substr = ""; 
     for (j = 0; j < thisNum; j++)
        subtr += thisString.charAt(i);
     if (i == 0)
    thisString = substr + thisString.substring(2
   }
}

我不想完成它,因为我厌倦了使用有限数量的JavaScript字符串函数。我相信Stack Overflow的天才们会为我提供一行的解决方案。对不对? ?

这里有一个简单的算法解决方案:

function decompress(str) {
    var result = "", char = "";
    for (var i = 0; i < str.length; i++) {
        char = str.charAt(i);
        console.log(char - '0');
        if (char > 1) {
            result += new Array(+char + 1).join(str.charAt(++i));
        } else {
            result += char;
        }
    }
    return result;
}

还有一个更简单的正则表达式:

function decompress(str) {
    return str.replace(/([2-9])(.)/g, function(m, a, b) { 
        return new Array(+a + 1).join(b);
    });
}

这里唯一的魔力是new Array(+a + 1).join(b)(也被两个解决方案使用)。第一个+a(或char)变成一个数字。然后我创建了一个包含a + 1个元素的数组,并将它们与以下字符作为"胶水"连接在一起。结果是ba重复字符串。

我相信你需要这样的东西:

function decompress(thisString) {
  var result = '';
  for (var i = 0; i < thisString.length; i += 2) {
    var thisNum = parseInt(thisString[i], 10);
    if (thisNum > 1) {
       for (var j = 0; j < thisNum; j++)
          result += thisString[i + 1];
    } else {
       result += (thisString[i] + thisString[i + 1]);
    }
  }
  return result;
}

你有很多变量,它们作为全局变量泄漏。请确保使用var来声明它们。