1

私は文字列を持っています

var Str = 'My name is 123 and my name is 234'.

今、私はこれを次のように分割します

var arrStr = Str.split(' ');

配列を反復処理し、単語が文字列か数値かによってロジックが異なります。どうすればそれを確認できますか? 私にtypeofはうまくいかないものを試しました。

編集:

複数の回答を見た後。今、私は絶望しています。最も効率的な方法はどれですか?

4

4 に答える 4

6

数値のみを気にする場合は、分割を使用する代わりに、次のような正規表現を使用できます。

var input = "My name is 123 and my name is 234";
var results = input.match(/\d+/g)

すべての部分に関心がある場合は、別の式を使用して、次のようにスペース以外のすべての文字を見つけることができます。

var input = "My name is 123 and my name is 234";
var results = input.match(/\S+/g)

次に、それらを 1 つずつ繰り返し、指定された文字列が数値であるかどうかを確認します。この有名な質問isNumeric()で @CMS によって投稿された有名な関数を使用していません。

function isNumber(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

注: @Pointy に感謝します。数値として使用する場合は、input.match(/\d+/g).map(Number).

于 2013-10-29T14:34:42.580 に答える
2

配列値を整数に変換する必要があります。

それらを繰り返すには、forループを使用できます。

for(i=0;i<arrStr.length;i++) {
    var result = !isNaN(+arrStr[i]) ? 'number' : 'string';
    console.log(result);
}

ここでは単項+を使用して、各配列値の値を数値に変換しようとしています。これが失敗した場合、結果は になりますNaN。次に、JavaScript のisNaN()メソッドを使用して、この値が であるかどうかをテストしていますNaN。そうでない場合は数値、そうでない場合は文字列です。

提供した文字列を使用した結果は次のとおりです。

string
string
string
number
string
string
string
string
number

これをifステートメントで使用するには、次のように簡単にできます。

for(i=0;i<arrStr.length;i++) {
    if(isNaN(+arrStr[i])) {
        /* Process as a string... */
    }
    else {
        /* Process as a number... */
    }
}

JSFiddle デモ

于 2013-10-29T14:38:07.443 に答える
1

スニファーの答えを詳しく説明するには...

var input = "My name is 123 and my name is 234";
var numberArray = input.match(/\d+/g);
var wordArray = input.match(/[A-Za-z]+/g);

for (var number in numberArray)
{
    //do something
}
for (var word in wordArray)
{
    //do something
}
于 2013-10-29T14:39:06.407 に答える
0

調べているうちに、そのNumber()物体について知りました。これは通常、数値の操作に使用されます。MDNには優れたドキュメントがあります。

数値を渡さないと (Not a Number)をNumber()返すことがわかりました。NaNNaN を返す数値はないため、渡されたオブジェクトが文字列か数値リテラルかを確認するのに適した方法です。

したがって、私のコードは次のようになります。

if (Number(arrStr[i]) == NaN){
    //string
} else  {
    //number
}
于 2013-10-29T14:33:24.573 に答える