以下任何想法?我想在函数中输入一个数字,并在奇数位之间插入短划线“ - ”。所以4567897会变成“456789-7”。到目前为止,我将数字转换为字符串然后是数组,然后在一行中查找两个奇数,并使用.splice()
方法在适当的位置添加短划线。它不起作用,我认为无论如何我可能没有走上正确的轨道,并且必须有一个更简单的解决方案。
function DashInsert(num) {
var numArr = num.toString().split('');
for (var i = 0; i < numArr.length; i++){
if (numArr[i]%2 != 0){
if (numArr[i+1]%2 != 0) {
numArr.splice(i, 0, "-");
}
}
}
return numArr;
}
答案 0 :(得分:2)
您可以尝试使用正则表达式
'4567897'.replace(/([13579])(?=[13579])/g, '$1-')
所以,我们发现一个奇数(([13579])
是一个捕获组,这意味着我们可以在替换$1
中使用它作为参考)确保它后面跟着另一个奇数捕获positive lookahead((?=[13579])
)并替换匹配的奇数加-
前缀
答案 1 :(得分:2)
问题是你正在改变你正在迭代的东西。相反,如果你保持一个单独的输出和输入......
function insertDashes(num) {
var inStr = String(num);
var outStr = inStr[0], ii;
for (ii = 1; ii < inStr.length; ii++) {
if (inStr[ii-1] % 2 !== 0 && inStr[ii] % 2 !== 0) {
outStr += '-';
}
outStr += inStr[ii];
}
return outStr;
}
答案 2 :(得分:0)
这是执行此操作的功能:
function dashes(number){
var numString = '';
var numArr = number.toString().split('');
console.log(numArr);
for(i = 0; i < numArr.length; i++){
if(numArr[i] % 2 === 1 && numArr[i+1] % 2 === 1){
numString += numArr[i] + '-';
}else{
numString += numArr[i];
}
}
console.log(numString);
}
dashes(456379);
经过测试和一切。
答案 3 :(得分:0)
编辑:OrangeDog的回答是早些时候发布的(差不多整整半个小时),我只想做一个使用你的代码的答案,因为你几乎就在那里。 使用另一个数组而不是拼接成一个循环(这恰好使用join返回一个字符串):
var num = 4567897;
function DashInsert(num) {
var numArr = num.toString().split('');
var len = numArr.length;
var final = [];
for (var i = 0; i < len; i++){
final.push(numArr[i]);
if (numArr[i]%2 != 0){
if (i+1 < len && numArr[i+1]%2 != 0) {
final.push("-")
}
}
}
return final.join("");
}
alert(DashInsert(num));
答案 4 :(得分:0)
function dashInsert(str) {
var arrayNumbers = str.split("");
var newString = "";
for (var i = 0; i < arrayNumbers.length; i++){
if(arrayNumbers[i] % 2 === 1 && arrayNumbers[i + 1] % 2 === 1){
newString = newString + arrayNumbers[i] + "-";
} else {
newString = newString + arrayNumbers[i];
}
}
return newString;
}
var result = dashInsert("3453246");
console.log(result);