1

「データ」と呼ばれる大きな配列があります。

10番目の配列位置で、データ値にこれがあります:

[10] => 1,2 

今JSでやろうとしていることは次のようなものです:

 i = 1;
 if(i in data[10]){
   //great success, very nice!
 }

コンマ区切りのデータは「IN」メソッドの配列のように振る舞うかもしれないと思っていましたが、うまくいきません。次のエラーが表示されます。

 Uncaught TypeError: Cannot use 'in' operator to search for '1' in 1,2 

私の問題の正しい解決策は何ですか?

4

1 に答える 1

4

1,2に割り当てる方法のコードは表示されませんdata[10]。の値は、JavaScriptシェル/コンソールで以下を実行することからわかるように1,2単純です。コンマ演算子のしくみについては、リファレンス2を参照してください。

ただし、表示されるエラーメッセージは、文字列がであることを示しています"1,2"。配列に変換するには、次のように使用する必要がありますsplit()

> data[10] = "1,2"
1,2
> data[10].split(',')
[ "1", "2" ]

値を反復処理するには、次inのように結果の配列で演算子を使用できます。

var data = new Array();
data[10] = '1,2';
var valueArray = data[10].split(',');
for (var i in valueArray) {
  alert('valueArray[' + i + '] is ' + valueArray[i]);
}

これはブラウザコンソールで実行でき、alert2つのメッセージが表示されます。

  • valueArray[0]は1です
  • valueArray[1]は2です

iループを開始する前に初期化する必要はないことに注意してください。オペレーターはこれinを自動的に行います。var iまた、上記のコードではローカル変数を使用することをお勧めします。

ちなみに、JSを初めて使用するが、多くのデータ構造操作を処理する必要がある場合は、underscore.jsについて学ぶ価値があります。特に見てください_.each()。アンダースコアを使用すると、多くのループロジックを作成する必要がなくなります。

ただし、メンバーシップチェックを実行する場合は、ではなくを使用する必要がありinますArray.indexOf()。コメントでjsfiddleからフォークされた例については、http: //jsfiddle.net/nRS9mを参照 してください。その他の例:

> valueArray
[ "1", "2" ]
> valueArray.indexOf("3")
-1
> valueArray.indexOf("1")
0
> valueArray.indexOf("2")
1
> valueArray.indexOf(1)
-1
> valueArray.indexOf((1).toString())
0
于 2012-06-27T02:54:26.470 に答える