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

时间:2014-03-17 20:55:26

标签: javascript

我刚刚开始学习JavaScript,我对它非常恼火。

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

“301051”表示“3个零,1个,0个,然后5个”

即。 “301051” ---> “0001011111”

一串零的数字根本不会改变(也不会有超过两个连续的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的天才为我提供了一个解决方案。对,伙计们????

2 个答案:

答案 0 :(得分:1)

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

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}转换为数字。然后我创建一个+ 1元素的数组,并将它们连接在一起,后续字符为“glue”。结果是a重复b字符串。

答案 1 :(得分:0)

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

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声明每一个。