将破折号插入数字中

时间:2013-08-06 14:57:00

标签: javascript

以下任何想法?我想在函数中输入一个数字,并在奇数位之间插入短划线“ - ”。所以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;      
}

5 个答案:

答案 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);