web-dev-qa-db-fra.com

Vérifier si un élément de tableau est défini dans JS

J'ai un tableau

    var assoc_pagine = new Array();
    assoc_pagine["home"]=0;
    assoc_pagine["about"]=1;
    assoc_pagine["work"]=2;

J'ai essayé 

    if (assoc_pagine[var] != "undefined") {

mais cela ne semble pas fonctionner

J'utilise jQuery, je ne sais pas si cela peut aider

Merci

24
Gusepo

Utilisez le mot clé in pour vérifier si un attribut est défini dans un objet

if (assoc_var in assoc_pagine)

OR

if ("home" in assoc_pagine)

Il y a pas mal de problèmes ici. 

Premièrement, est-ce que var est supposé une variable ayant la valeur "home", "work" ou "about"? Ou avez-vous voulu inspecter une propriété appelée "var"?

Si var est censé être une variable ayant une valeur de chaîne, veuillez noter que var est un mot réservé en JavaScript et que vous devrez utiliser un autre nom, tel que assoc_var.

var assoc_var = "home";
assoc_pagine[assoc_var] // equals 0 in your example

Si vous vouliez inspecter la propriété appelée "var", il vous suffira de la placer à l'intérieur de guillemets.

assoc_pagine["var"]

Alors, undefined n'est pas la même chose que "undefined". Vous aurez besoin de typeof pour obtenir la représentation sous forme de chaîne du type d'objet. 

Ceci est une décomposition de toutes les étapes. 

var assoc_var = "home"; 
var value = assoc_pagine[assoc_var]; // 0
var typeofValue = typeof value; // "number"

Donc pour résoudre votre problème

if (typeof assoc_pagine[assoc_var] != "undefined") 

update: Comme d'autres réponses l'ont indiqué, l'utilisation d'un tableau n'est pas la meilleure solution pour résoudre ce problème. Pensez à utiliser un Object à la place.

var assoc_pagine = new Object();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
48
Stefan
var assoc_pagine = new Array();
assoc_pagine["home"]=0;

N'utilisez pas de Array pour cela. Les tableaux sont pour les listes indexées numériquement. Utilisez simplement une Object ({}) en clair.

Voici ce que vous pensez de la chaîne 'undefined':

if (typeof assoc_pagine[key]!=='undefined')

C'est (plus ou moins) la même chose que de dire

if (assoc_pagine[key]!==undefined)

Cependant, de toute façon, c'est un peu moche. Vous déréférenciez une clé qui pourrait ne pas exister (ce qui serait une erreur dans un langage plus raisonnable) et vous vous fiez au piratage étrange de JavaScript qui vous donne la valeur spéciale undefined pour des propriétés non existantes.

Cela ne vous dit pas non plus si la propriété n'était pas réellement ou si elle y était mais explicitement définie sur la valeur undefined.

Il s'agit d'une meilleure approche plus explicite, lisible et plus complète de l'OMI:

if (key in assoc_pagine)
12
bobince

var est une déclaration ... donc c'est un mot réservé ... Alors appelez-le autrement .

if(typeof array[name] !== 'undefined') {
    alert("Has var");
} else {
    alert("Doesn't have var");
}
6
xavierm02

Ce n'est pas un tableau. Mieux vaut le déclarer comme ceci:

var assoc_pagine = {};
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;

ou

var assoc_pagine = {
                 home:0,
                 about:1,
                 work:2
               };

Pour vérifier si un objet contient une étiquette, procédez comme suit:

if('work' in assoc_pagine){
   // do your thing
};
3
KooiInc
if (assoc_pagine.indexOf('home') > -1) {
   // we have home element in the assoc_pagine array
}

Mozilla indexOf

1

Cela a fonctionné pour moi

if (assoc_pagine[var] != undefined) {

au lieu de cela

if (assoc_pagine[var] != "undefined") {
1
antonD

TLDR; Voici ce que je peux faire de mieux: (Selon votre cas d'utilisation, il existe plusieurs façons d'optimiser cette fonction.)

function arrayIndexExists(array, index){
    if ( typeof index !== 'number' && index === parseInt(index).toString()) {
        index = parseInt(index);
    } else {
        return false;//to avoid checking typeof again
    }
    return typeof index === 'number' && index % 1===0 && index >= 0 && array.hasOwnKey(index);
}

Les exemples de l'autre réponse se rapprochent et fonctionnent pour certaines raisons (probablement la plupart du temps), mais sont techniquement tout à fait incorrects pour les raisons que j'explique ci-dessous.

Les tableaux Javascript n'utilisent que des touches "numériques". Lorsque vous définissez une "clé associative" sur un tableau, vous définissez en fait une propriété sur cet objet tableau, et non un élément de ce tableau. Par exemple, cela signifie que la "clé associative" ne sera pas itérée lors de l'utilisation de Array.forEach () et ne sera pas incluse lors du calcul de Array.length. (L'exception pour cela est que des chaînes telles que "0" seront résolues en un élément du tableau, mais pas des chaînes telles que "0".)

En outre, la vérification d'un élément de tableau ou d'une propriété d'objet inexistante est évaluée comme non définie, mais cela ne vous indique pas en réalité que l'élément de tableau ou la propriété de l'objet n'a pas encore été défini. Par exemple, indéfini est également le résultat obtenu en appelant une fonction qui ne se termine pas par une instruction return. Cela pourrait entraîner des erreurs étranges et des difficultés pour le débogage du code.

Cela peut être déroutant, mais peut être exploré très facilement en utilisant la console javascript de votre navigateur. (J'ai utilisé chrome, chaque commentaire indique la valeur évaluée de la ligne précédente.);

var foo = new Array();
foo;
//[]
foo.length;
//0
foo['bar'] = 'bar';
//"bar"
foo;
//[]
foo.length;
//0
foo.bar;
//"bar"

Cela montre que les clés associatives ne sont pas utilisées pour accéder aux éléments du tableau, mais pour les propriétés de l'objet.

foo[0] = 0;
//0
foo;
//[0]
foo.length;
//1
foo[2] = undefined
//undefined
typeof foo[2]
//"undefined"
foo.length
//3

Cela montre que la vérification de typeof ne vous permet pas de voir si un élément a été défini.

var foo = new Array();
//undefined
foo;
//[]
foo[0] = 0;
//0
foo['0']
//0
foo[' 0']
//undefined

Cela montre l'exception que j'ai mentionnée ci-dessus et pourquoi vous ne pouvez pas utiliser simplement parseInt ();

Si vous souhaitez utiliser des tableaux associatifs, il vaut mieux utiliser des objets simples comme recommandé par d'autres réponses.

1
Omn
function isset(key){
ret = false;
array_example.forEach(function(entry) {
  if( entry == key ){
    ret = true;
  }
});
return ret;
}

alert( isset("key_search") );
0
Jackson Bicalho

Le moyen le plus efficace:

if (array.indexOf(element) > -1) {
   alert('Bingooo')
}

W3Schools

0
Darlan Dieterich