Javascript 插入到数字字符串中
让函数DashInsert(num)在num中的两个奇数之间插入破折号('-')。例如:如果num是454793,则输出应该是4547-9-3。不要把零算作奇数。 这是我的代码(不工作)。当我运行它时,我得到了与无限循环相同的响应,在无限循环中我必须终止页面,但我不明白为什么。我知道有很多方法可以做到这一点,但现在我想知道为什么我的方法行不通。谢谢Javascript 插入到数字字符串中,javascript,arrays,string,insert,Javascript,Arrays,String,Insert,让函数DashInsert(num)在num中的两个奇数之间插入破折号('-')。例如:如果num是454793,则输出应该是4547-9-3。不要把零算作奇数。 这是我的代码(不工作)。当我运行它时,我得到了与无限循环相同的响应,在无限循环中我必须终止页面,但我不明白为什么。我知道有很多方法可以做到这一点,但现在我想知道为什么我的方法行不通。谢谢 function DashInsert(num) { num = num.split(""); for (i = 1; i < n
function DashInsert(num) {
num = num.split("");
for (i = 1; i < num.length; i++) {
if (num[i - 1] % 2 != 0 && num[i] % 2 != 0) {
num.splice(i, 0, "-");
}
}
num = num.join("");
return num;
}
函数DashInsert(num){
num=num.split(“”);
对于(i=1;i
一旦插入破折号-
,if语句将检查此'-'%2!=0
,它始终为真,因此会无限地插入另一个破折号
这里有一种使用正则表达式和函数替换的方法:
function DashInsert(n) {
var f = function(m,i,s) { return m&s[i+1]&1 ? m+'-' : m; };
return String(n).replace(/\d/g,f);
}
DashInsert(454793) // "4547-9-3"
插入破折号
-
后,if
语句将检查此'-'%2!=0
,它始终为真,因此会无限地插入另一个破折号
这里有一种使用正则表达式和函数替换的方法:
function DashInsert(n) {
var f = function(m,i,s) { return m&s[i+1]&1 ? m+'-' : m; };
return String(n).replace(/\d/g,f);
}
DashInsert(454793) // "4547-9-3"
添加破折号时,此破折号将在下一次迭代中作为数字处理。你需要前进一步
function DashInsert(num) {
var num = num.split("");
for (var i = 1; i < num.length; i++) {
if ((num[i - 1] % 2 != 0) && (num[i] % 2 != 0)) {
num.splice(i, 0, "-");
i++; // This is the only thing that needs changing
}
}
num = num.join("");
return num;
}
函数DashInsert(num){
var num=num.split(“”);
对于(变量i=1;i
添加破折号时,此破折号将在下一次迭代中作为数字处理。你需要前进一步
function DashInsert(num) {
var num = num.split("");
for (var i = 1; i < num.length; i++) {
if ((num[i - 1] % 2 != 0) && (num[i] % 2 != 0)) {
num.splice(i, 0, "-");
i++; // This is the only thing that needs changing
}
}
num = num.join("");
return num;
}
函数DashInsert(num){
var num=num.split(“”);
对于(变量i=1;i
使用num.splice
将新条目插入数组,从而增加其长度–这使得i
的值“落后于”增加的数组长度,因此永远不会满足中断条件
除此之外,在插入-
后的下一次迭代中,num[i-1]
将是-
字符,因此实际上您正在尝试检查'-'%2!=0
…这也没什么意义
因此,当您在数组中插入一个-
时,您还必须将i
增加一个–这将a)说明数组的长度增加了一个,并且它将在下一次迭代中检查-
之后的下一个数字:
function DashInsert(num) {
num = num.split("");
for (i = 1; i < num.length; i++) {
if (num[i - 1] % 2 != 0 && num[i] % 2 != 0) {
num.splice(i, 0, "-");
i++; // <- this is the IMPORTANT part!
}
}
num = num.join("");
return num;
}
alert(DashInsert("454793"));
函数DashInsert(num){
num=num.split(“”);
对于(i=1;i i++;//使用num.splice
将新条目插入数组,从而增加其长度–这使得i
的值“落后于”增加的数组长度,因此永远不会满足中断条件
除此之外,在插入-
后的下一次迭代中,num[i-1]
将是-
字符,因此实际上您正在尝试检查'-'%2!=0
…这也没有什么意义
因此,当您在数组中插入一个-
时,您还必须将i
增加一个–这将a)说明数组的长度增加了一个,并且它将在下一次迭代中检查-
之后的下一个数字:
function DashInsert(num) {
num = num.split("");
for (i = 1; i < num.length; i++) {
if (num[i - 1] % 2 != 0 && num[i] % 2 != 0) {
num.splice(i, 0, "-");
i++; // <- this is the IMPORTANT part!
}
}
num = num.join("");
return num;
}
alert(DashInsert("454793"));
函数DashInsert(num){
num=num.split(“”);
对于(i=1;i i++;//这是因为有时在破折号“-”本身上使用%运算符,例如在将破折号拼接到数组中之后
您可以使用克隆阵列来更正此行为
function DashInsert(num) {
num = num.split("");
var clone = num.slice(0);
var offset = 0;
for (i = 1; i < num.length; i++) {
if (num[i - 1] % 2 != 0 && num[i] % 2 != 0) {
clone.splice(i + offset, 0, "-");
offset++;
}
}
return clone.join("");
}
alert(DashInsert("45739"));
函数DashInsert(num){
num=num.split(“”);
var clone=num.slice(0);
var偏移=0;
对于(i=1;i
输出:45-7-3-9
演示:这是因为有时在短划线“-”本身上使用%运算符,例如在将短划线拼接到阵列中之后
您可以使用克隆阵列来更正此行为
function DashInsert(num) {
num = num.split("");
var clone = num.slice(0);
var offset = 0;
for (i = 1; i < num.length; i++) {
if (num[i - 1] % 2 != 0 && num[i] % 2 != 0) {
clone.splice(i + offset, 0, "-");
offset++;
}
}
return clone.join("");
}
alert(DashInsert("45739"));
函数DashInsert(num){
num=num.split(“”);
var clone=num.slice(0);
var偏移=0;
对于(i=1;i
输出:45-7-3-9
演示:为了补充前面给出的答案,我想与大家分享一个替代的实现,它不会修改现有的阵列:
function DashInsert(num) {
var characters = num.split("");
var numbers = characters.map(function(chr) {
return parseInt(chr, 10);
});
var withDashes = numbers.reduce(function(result, current) {
var lastNumber = result[result.length - 1];
if(lastNumber == null || current % 2 === 0 || lastNumber % 2 === 0) {
return result.concat(current);
} else {
return result.concat("-", current);
}
}, []);
return withDashes.join("");
}
它更长,但IMHO更好地揭示了其意图,并避免了最初的问题。为了补充已经给出的伟大答案,我想分享一个替代实现,它不会修改现有的数组:
function DashInsert(num) {
var characters = num.split("");
var numbers = characters.map(function(chr) {
return parseInt(chr, 10);
});
var withDashes = numbers.reduce(function(result, current) {
var lastNumber = result[result.length - 1];
if(lastNumber == null || current % 2 === 0 || lastNumber % 2 === 0) {
return result.concat(current);
} else {
return result.concat("-", current);
}
}, []);
return withDashes.join("");
}
它更长,但IMHO更好地揭示了意图,并避免了最初的问题。@A1rPun这没有什么区别。确实如此,您的代码可能会导致奇怪的行为。我认为这是因为有时您在破折号“-”本身上使用%运算符,例如在将破折号拼接到数组中之后。@A1rPun这没有什么区别是的,你的代码可能会导致奇怪的行为。我想这是因为