3

对以下有任何想法吗?我想在函数中输入一个数字并在奇数位之间插入破折号“-”。所以 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;      
}
4

5 回答 5

2

您可以尝试使用正则表达式

'4567897'.replace(/([13579])(?=[13579])/g, '$1-')

正则表达式解释

因此,我们找到一个奇数(([13579])是一个捕获组,意味着我们可以将其用作替换中的参考$1)确保它后面跟着另一个奇数在非捕获正向前瞻(?=[13579]))中并替换匹配的奇数添加-字首

于 2013-08-06T15:02:00.427 回答
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;
}
于 2013-08-06T15:02:34.043 回答
0

编辑:OrangeDog 的答案较早发布(将近半小时),我只是想使用您的代码来回答,因为您快到了。使用另一个数组而不是拼接到您正在循环的一个数组中(这恰好使用连接返回一个字符串):

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));
于 2013-08-06T15:26:04.877 回答
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);

测试和一切。

于 2013-08-06T15:03:27.783 回答
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);
于 2018-10-03T17:59:24.923 回答