web-dev-qa-db-ja.com

javascript indexOfが配列で期待どおりに機能しない

要素がmyarrayにあるように見えても、myarray.indexOf(element)から-1を取得しています。

ここにいくつかのコードスニペットがあります:

function createChangeRecord( old_array, new_array ) {
    var nds = new_array.slice(0,new_array.length);
    var el, idx;
    if (...) {
        ...
    } else if ( old_array.length==new_array.length ) {
        for ( var i=0; i<old_array.length; i++ ) {
            el = old_array[i];
            idx = nds.indexOf(el);
            if ( idx!=(-1) ) {
                ...
            } else {
                var a = "el: " + el + "; nds: " + nds + "; nds.indexOf(el): " + nds.indexOf(el);
                alert( a );
                ...
            }
        }
        ...
    }
    ...
}

このアラートは、ndsに実際にelが含まれていることを示していますが、このアラートは、ndsにelが含まれていない場合にのみtrueになるidx ==-1の場合にのみ発生する必要があります。

私の場合、特定の問題を特定するのに十分な情報を提供していませんが、この動作を引き起こす可能性のある一般的な理由を誰かが教えてくれますか?

同様の質問への回答は、indexOfの代わりにjQuery inArray()を使用することをお勧めしますが、indexOfが機能しない理由を知りたいです。他の人は、indexOfは配列ではなく文字列用であると提案しましたが、私が見つけたオンラインドキュメントからはそうではありません。

19
baixiwei

検索配列に数値が含まれていて、2"2"などの項目を検索する場合

nds = [1, 2, 3, 4, 5];

これは機能します(プラスを追加)

nds.indexOf(+el)
0
user2511140