3

私は次のようなJSONオブジェクトを作成しています

tags = {"jon":["beef","pork"],"jane":["chicken","lamb"]};

これは、次のような配列からphpを使用して生成されました

$arr = array(
        'jon' => array('beef', 'pork'),
        'jane' => array('chicken', 'lamb')
       );
$tags = json_encode($arr);

そして、何かがどちらかにあるかどうかを確認したいと思います。これらはどれも機能していないようですが、

if('lamb' in tags.jane)) {
    console.log('YES');
} else {
    console.log('NO');
}

コンソールにNOを書き込みます

if('foo' in tags.jane)) {
    console.log('YES');
} else {
    console.log('NO');
}

また、コンソールにNOを書き込みます

だから見て

typeof(tags.jane);

それはそれ"object"

console.log(tags);

は次のことを示しています。

Object
jane: Array[2]
    0: "chicken"
    1: "lamb"
    length: 2
    __proto__: Array[0]
jon: Array[2]
    0: "beef"
    1: "pork"
    length: 2
    __proto__: Array[0]
__proto__: Object

だから私は多分tags.jane実際には配列かもしれないと思って試しました

if($.inArray('lamb', tags.jane)) {
    console.log('YES');
} else {
    console.log('NO');
}

これはコンソールにYESを書き込みますが

if($.inArray('foo', tags.jane)) {
    console.log('YES');
} else {
    console.log('NO');
}

また、コンソールにYESを書き込みます。

JSONオブジェクトを間違ってビルドしていますか?値を適切にターゲティングしていませんか?アドバイスをいただければ幸いです。これがオブジェクトではなく配列として簡単である場合、私はそれを変更するための完全な制御権を持っています。私はこれをどのように扱うべきかについて少し困惑しています。

4

5 に答える 5

4

要素が見つからない場合、jQuery.inArrayは-1を返します。これtrueは、JavascriptのPOVからの値です。これを試して:

if($.inArray('foo', tags.jane) != -1) {
于 2012-04-06T18:34:32.013 に答える
3

あなたの2番目の答えのセットはあなたが行くべき方法です。ただし、$。inArrayはブール値ではなくインデックスを返します。ゼロ以外の整数はすべてtrueです。つまり、fooが見つからない場合は-1を返し、YEStrueと評価して出力します。

同様に、 falseに$.inArray('chicken', tags.jane)戻り0、キャストします。これも、希望する答えではありません。

代わりに、$.inArray('foo', tags.jane) !== -1条件として使用してください。

于 2012-04-06T18:34:36.853 に答える
2

tags.nameは、その人の配列を提供します。したがって$.inArray("chicken",tags.jane)、「チキン」がジェーンのタグ配列に含まれているかどうかを確認します。そうでない場合は-1になり、そうでない場合は配列内の位置になります(この例を使用すると、最初の配列要素であるゼロが返されます)。

于 2012-04-06T18:37:24.167 に答える
1

間違った理由ででキーワードを使用しています。ステートメント(prop'in' obj)は、オブジェクト(連想配列)にpropの値を持つプロパティがあるかどうかを確認します。配列で「in」キーワードを使用しているため、tags.janeはインデックスを持つ配列であり、プロパティに関連付けられた配列ではないため、falseが返されます。

値が配列内にあるかどうかを知りたい場合は、ループして比較します。'in'キーワードを使用する場合は、配列をそのようなオブジェクトに変換します。

    tags = {};
    // old code
    tags.jane = ['lamb', 'food']; 
console.log(('lamb' in tags.jane) === false )
    // new code
    tags.jane = {
       'lamb':1,
        'food':1
    }
console.log(('lamb' in tags.jane) === true )

https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in

于 2012-04-06T18:48:04.610 に答える
0

使用できません

if('foo' in tags.jane))

として使用する必要があります

if (1 in tags.jane)

'foo'がtags.janeにあることを確認したい場合は、これを試してください

var inIt = (function() {
    var inIt = false;
    tags.jane.forEach(function(item) {
        inIt = inIt || 'foo' == item;
    });
    return inIt;
})();
于 2012-04-06T19:47:22.867 に答える