-3

オブジェクトを使用してinArrayを設定しようとしましたが、機能しません

var test = {aa:1, bb:0}
console.log($.inArray(1,test))

私はいつも-1を持っています

ありがとう

4

2 に答える 2

3
{} = object literal

[] = array object

$.inArrayアレイで動作するように設計されています。すでに理解しているように、オブジェクトでは正しく機能しません(状況に関係なく-1を返します)。オブジェクトについて言えば、オブジェクトリテラルを作成するために使用した構文は形式が正しく{ a = b }なく、としてではなく、として記述されてい{ a : b }ます。次に例を示します。

var test = { aa: 1, bb: 0 };

また、オブジェクトのプロパティが特定の値を持っているかどうかを調べようとしているのであって、オブジェクトがそのプロパティを持っているのではないこともわかります。後者の場合は、inキーワードまたは.hasOwnProperty関数を使用します。ただし、ケースに合わせて独自の関数を作成する必要があります。これを試して:

var inObject = function( obj, val ) {

    for ( var i in obj ) {

        if ( obj.hasOwnProperty(i) ) {

            if ( obj[i] === val ) return true;

        }

    }

    return false;

};

そして、次のように使用します。

>>> var test = { aa: 1, bb: 0 };

>>> inObject( test, 1 );
    true
于 2012-11-17T21:25:59.810 に答える
2

あなたのコードでは、あなたは何か他のことをしています。aa実際には、プロパティと。を持つオブジェクトリテラルを使用してオブジェクトを作成しようとしていますbb。キーはaabbではなく01です。あなたはこれを試すことができます:

var test = { aa:1, bb:0 };
console.log('aa' in test); //true

キーを使用したい場合は0、次の1ことを試すことができます。

var test = { 1: 'aa', 0: 'bb' };
console.log(1 in test);  //true

また、次のこともできます。

var test = { 1: 'aa', 0: 'bb' };
console.log(test['1']);  //"aa"

オブジェクトに値が含まれているかどうかを確認する場合は、次のようにします。

function containsValue(obj, key) {
   for (var prop in obj) {
       if (obj[prop] === key) {
           return true;
       }
   }
   return false;
}
var test = { aa:1, bb:0 };
console.log(containsValue(test, 1)); //true
于 2012-11-17T21:17:18.693 に答える