0

私はinArrayを使用して髪を引き裂いています。yinz が役立つことを願っています。

データベースからいくつかのユーザー ID を取得する AJAX があります。これは JSON でエンコードされ、配列としてプルダウンされます。ただし、値を配列と照合しようとすると、常に -1 になります。決して一致しません。

何が起こっているのかを把握するために一連のアラートを設定しましたが、なぜそれが機能していないのか、一生わかりません。議論のために、それがプルダウンしているユーザーが #s 1、2、および 3 であると仮定しましょう。画像コレクションで表されるユーザー ID は、1、2、3、4、5 です。

$.ajax({
    dataType: "json",
    url: "/* some url */",
    success: function (players) {
        $("#userpics img").each(function () {
            var userid = $(this).data("userid");
            alert (players); // 1,2,3
            alert (userid); // 1
            alert ("is array? " + Array.isArray(players)); // true
            alert ("in array? " + $.inArray(userid, players)); // -1
            alert ("in object? " + (userid in players)); // false
            alert ("match? " + (userid == players[0])); // true
        })
   }
});

ご覧のとおり、プルダウンされる配列は最初のアラートでは文字列として表示されますが、3 番目のアラートでは配列として解析されます。userid = 1と を引き下げた場合でも、と["1","2","3"]は一致しませんinArray。しかし、私が一致userid == players[0]すると一致します。

私は完全に困惑しています。

4

2 に答える 2

0

ドキュメントを読んでみてください...

jQuery.inArray()は、配列内の要素のインデックスを返します (見つかった場合)。

配列の最初の要素を検索すると、結果はZEROになります。

JavaScript では、ゼロはfalseと評価されます。

要素が含まれているかどうかを判断するには、 inArray()の結果を明示的に比較する必要があります。-1

これを使って:

if (inArray(val, someArray) !== -1) {
    alert("it's in there...");
}

これの代わりに:

if (inArray(val, someArray)) {
    alert("This won't work for the first element.");
}
于 2012-10-16T01:31:58.777 に答える
0

文字列を数値の配列と比較するようなものです..

それが、この出力を取得している理由かもしれません..

また、アイテムが配列に存在しないことを示唆しているため、負のインデックスを返しているかどうかも確認してください

if( $.inArray(userid, players) > - 1){

    // Item in array
}
于 2012-10-16T01:35:27.713 に答える