我刚刚开始学习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的天才为我提供了一个解决方案。对,伙计们????
答案 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
声明每一个。