3

関数を実行すると が -1 を返すという問題がありjQuery.InArray()ますが、テストしている値が間違いなく配列にあることはわかっています。

実行する直前に配列の値を console.log にするjQuery.inArray()と、値が存在して表示されるため、それらが配列内にあることがわかります。これが私が取り組んでいるものの例です:

/* -- In page.php -- */
images = [8, 13, 21, 32, 40, 56]; 


/* -- In script.js -- */
console.log('images->', images); 
//output  images-> [8, 13, 21, 32, 40, 56]

var testingValue = 13;

console.log('inArray->', jQuery.inArray(testingValue, images)); //Should return 1
//output inArray-> -1

console.log('inArray->', jQuery.inArray(13, images)); //Should return 1
//output inArray-> -1

console.log('inArray->', jQuery.inArray("13", images)); //Should return -1
//output inArray-> -1

console.log('inArray->', jQuery.inArray('13', images)); //Should return -1 
//output inArray-> -1

-1上位 2 つは返されるはずですが、これらはすべて返され1ます。奇妙なことjQuery.inArray(testingValue, images)に、コンソールで手動でテストすると、値 1 が得られます。

注意すべき点: 変数imagesは、js ファイルが含まれる php ページに作成されます。これは問題になりません。

追記:はい、スクリプトのこの部分が実行されるかなり前に jQuery が含まれています。この関数の前に、他の多くの jQuery 関数が正常に実行されています。

私が疑問に思っているのは、この機能に落とし穴があるかどうかです。私は過去にそれをうまく使用してきましたが、これが適切な値を返すのを妨げるようなコードは何も見当たりません。

4

1 に答える 1

7

良い夜の休息の後、私は一周して問題を新たに見ることができました. 変数testingValue = 13;は整数として明示的にキャストされます。問題は、 jQuery を介してその値を動的に取得していたことです$.each(arrayName, function(index,value){})。データはそれindexが実際に整数であることを示していましたが、何らかの理由$.inArray()でそれを int/float のように扱っていなかったため、数値配列で値が見つかりませんでした。inArray であることを確認する前に、コードを変数にparseInt()変更しました。index

ロングストーリーショート

整数または浮動小数点数の配列で jQuery.inArray() を使用しようとすると問題が発生する場合は、関数が正しいデータ型を受け取るようにするために、それぞれparseInt()またはを使用してみてください。parseFloat()

if( jQuery.inArray(parseInt(yourVariable), yourArray) > -1)
{
    return true;
}
于 2013-01-22T17:12:23.573 に答える