3

次のアイデアはありますか?関数に数値を入力し、奇数桁の間にダッシュ「-」を挿入したいと考えています。したがって、4567897 は「456789-7」になります。これまでのところ、数値を文字列に変換してから配列に変換し、連続する 2 つの奇数を探し、.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の回答は以前に(ほぼ30分前に)投稿されました。あなたがほとんどそこにいるので、あなたのコードを使用する回答を作りたかっただけです。ループしていた配列にスプライシングする代わりに、別の配列を使用します (これは、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));
于 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 に答える