1

例:番号があり1122ます。1与えられた数字に複数回数字が含まれているかどうかを確認したいと思います。この場合、を返す必要がありtrueます。

コードは柔軟である必要があります。、、などの任意の数で機能する必要があります334056604177

4

6 に答える 6

2

メソッドを呼び出すか、以下を連結することにより、JSに任意の数値を文字列に強制変換するように簡単に「強制」できます。toString

var someNum = 1122;
var oneCount = (someNum + '').split('1').length;

数値を空の文字列に連結することにより、変数が文字列に強制変換されるため、必要なすべての文字列メソッド(、、、、 ...)を使用でき.matchます。 この例では、各文字の文字列を分割し、結果の配列の長さをカウントして使用することを選択しました。長さが2より大きい場合、あなたが知る必要があることをあなたが知っているよりも。.substring.indexOf
'1'

var multipleOnes = ((someNum + '').split('1').length > 2);//returns a bool, true in this case

あなたのコメントに応えて、それを柔軟にするために-単純な関数を書くことは次のようになります:

function multipleDigit(number, digit, moreThan)
{
    moreThan = (moreThan || 1) + 1;//default more than 1 time, +1 for the length at the end
    digit = (digit !== undefined ? digit : 1).toString();
    return ((someNum + '').split(digit).length > moreThan);
}
multipleDigit(1123, 1);//returns true
multipleDigit(1123, 1, 2);//returns false
multipleDigit(223344,3);//returns 3 -> more than 1 3 in number.
于 2012-12-30T19:07:42.443 に答える
1

javascriptのmatch()メソッドを使用します。基本的に、あなたがする必要があるのは、最初に数値を文字列に変換することです。数値にはRegExpメソッドがありません。その後、番号1をグローバルに照合し、結果をカウントします(matchは、一致したすべての結果を含む配列を返します)。

​var number = 1100;
console.log(number.toString().match(/1/g).length);​
于 2012-12-30T19:03:56.103 に答える
1
function find(num, tofind) {
   var b = parseInt(num, 10);
   var c = parseInt(tofind, 10);
   var a = c.split("");
   var times = 0;
   for (var i = 0; i < a.length; i++) {
      if (a[i] == b) {
         times++;
      }
   }
   alert(times);
}

find('2', '1122');
于 2012-12-30T19:07:28.923 に答える
1

数値を文字列に変換し、繰り返し処理します。効率を上げるために、2桁目が見つかったらtrueを返します。

function checkDigitRepeat(number, digit) {
    var i, count = 0;

    i = Math.abs(number);
    if(isNaN(i)) {
        throw(TypeError('expected Number for number, got: ' + number));
    }
    number = i.toString();

    i = Math.abs(digit);
    if(isNaN(i)) {
        throw(TypeError('expected Number for digit, got: ' + digit));
    }
    digit = i.toString();

    if(digit > 9) {
        throw(SyntaxError('expected a digit for digit, got a sequence of digits: ' + digit));
    }

    for(i = 0; i < number.length; i += 1) {
        if(number[i] === digit) {
            count += 1;
            if(count >= 2) { return true; }
        }
    }

    return false;
}

数字のシーケンスをチェックしたい場合、あなたの解決策は正規表現を使用することにあるかもしれません。

于 2012-12-30T19:28:20.687 に答える
0
var myNum = '0011';

var isMultipleTimes = function(num) {
    return !!num.toString().match(/(\d)\1/g);
}

console.log(isMultipleTimes(myNum));

JavaScriptマッチ

于 2012-12-30T19:15:29.137 に答える
0

@Aspiring Aqibの答えを使用して、実際に適切に、希望どおりに機能する関数を作成しました。

それが機能する方法は次のとおりです。

実行例:multDig('221','2')

  1. number (最初の引数)を、各要素が1桁の配列に分割します。
    出力:['2','2','1']
  2. ループを実行します。ループは、各配列要素が(2番目の引数)forと一致するかどうかをチェックし、一致する場合は変数をインクリメントします。出力:digit times
    2
  3. forループ内で一致がすでに検出されているかどうかを確認して、次のような長い数値のパフォーマンスを向上させます。2211111111111111
  4. true番号が複数回見つかった場合はを返し、それ以外の場合はを返しますfalse

そして最後にコード自体:

function multDig(number, digit){
    var finalSplit = number.toString().split(''), times = 0;
    for (i = 0; i < finalSplit.length; i++){
        if (finalSplit[i] == digit){
            times++
        }
        if (times > 1){
            return true;
        }
    }
    return false;
}
于 2013-02-18T14:49:49.343 に答える