web-dev-qa-db-fra.com

javascript indexOf ne fonctionne pas comme prévu avec le tableau

Je reçois -1 de myarray.indexOf(element) même lorsque l'élément semble être dans mon tableau.

Voici quelques extraits de code:

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 );
                ...
            }
        }
        ...
    }
    ...
}

L'alerte me montre que nds contient en effet el mais l'alerte ne doit se déclencher que lorsque idx == - 1, ce qui ne devrait être vrai que lorsque nds ne contient pas el.

Je sais que je n'ai pas donné suffisamment d'informations pour déterminer le problème spécifique dans mon cas, mais peut-être que quelqu'un peut me dire quelques raisons générales qui pourraient provoquer ce comportement?

Les réponses à une question similaire suggèrent d'utiliser jQuery inArray () au lieu de indexOf, mais je veux savoir pourquoi indexOf ne fonctionne pas. D'autres ont suggéré que indexOf est pour les chaînes, pas pour les tableaux, mais ce n'est pas vrai dans les documents en ligne que je peux trouver.

19
baixiwei

Si votre tableau de recherche contient des nombres et que vous souhaitez rechercher des éléments tels que 2 ou "2"

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

Cela fonctionne (Ajouter plus)

nds.indexOf(+el)
0
user2511140