533 votes

Comment puis-je vérifier en JavaScript si une valeur existe à un certain index du tableau?

Est-ce que cela fonctionnera pour tester si une valeur à la position index existe ou non, ou y a-t-il une meilleure façon de le faire :

if(arrayName[index]==""){
     // do stuff
}

6 votes

Veuillez noter qu'il ne s'agit pas de vérifier si tout le tableau est vide, mais juste un certain emplacement qui a la valeur d'index"

0 votes

Le titre peut être amélioré en disant "Comment puis-je vérifier en JavaScript si une valeur existe à un certain index du tableau".

2voto

Kamil Kiełczewski Points 6496

Détection réelle : in opérateur

Cette question a environ 10 ans et il est surprenant que personne n'en ait encore parlé - cependant certaines personnes voient le problème lorsque nous utilisons l'opérateur delete (par exemple ici). C'est également une solution un peu contre-intuitive, mais l'opérateur in qui fonctionne dans le 'monde des objets' peut également fonctionner avec des tableaux (car nous pouvons regarder les index du tableau comme des 'clés'...). De cette manière, nous pouvons détecter et distinguer entre une valeur de tableau undefined et une valeur (index) supprimée par delete

if(index in arrayName) {
   // faire quelque chose 
}

let arr = [0, 1, 2, 3, null, undefined,6]

delete arr[2]; // nous supprimons l'élément à l'index=2

if(2 in arr) console.log('Vous ne verrez pas ceci car l'idx 2 a été supprimé');
if(5 in arr) console.log('C'est l'élément arr[5]:', arr[5]);

// Tableau entier et indexes plus grands que arr.length:
for(let i=0; i<=9; i++) {
  let val = (i in arr) ? arr[i] : 'vide'
  let bound = i

`La console Chrome révèle quelques informations sur le tableau extrait supprimé, l'index 2 en réalité n'existe pas du tout (!!!) (de la même manière qu'une clé est supprimée d'un objet). Ce qui est également intéressant ici, c'est que le tableau est vu comme des paires clé-valeur (nous voyons même la clé 'length'). Il est également intéressant de noter quetypeof arrest Object (!!!), l'opérateurdeleteetinfonctionnent comme pour les objets JS (la notation entre crochetsarr[idx]etobj[key]` est similaire) - il semble donc que le tableau soit un objet JS spécial dans le cœur.

entrer la description de l'image ici

Pour obtenir un effet similaire sans delete, définissez le tableau comme suit

[0, 1,, 3, null, undefined, 6] // faites attention aux doubles virgules: ",,"``

1voto

Alireza Points 40192

D'accord, voyons d'abord ce qui se passe si une valeur de tableau n'existe pas en JavaScript, donc si nous avons un tableau comme ci-dessous :

const arr = [1, 2, 3, 4, 5];

et maintenant nous vérifions si 6 se trouve à l'index 5 ou non :

arr[5];

et nous obtenons undefined...

Cela nous donne essentiellement la réponse, la meilleure façon de vérifier si c'est undefined, donc quelque chose comme ceci :

if("undefined" === typeof arrayName[index]) {
  //la valeur du tableau n'est pas là...
}

Il vaut mieux NE PAS faire cela dans ce cas :

if(!arrayName[index]) {
  //Ne vérifiez pas comme ça...
}

Parce que imaginez que nous avons ce tableau :

const arr = [0, 1, 2];

et nous faisons :

if(!arr[0]) {
  //Cela passe, car en JavaScript 0 est falsy
}

Donc, comme vous pouvez le voir, même si 0 est là, il n'est pas reconnu, il y a quelques autres choses qui peuvent faire la même chose et rendre votre application boguée, alors faites attention, je les liste tous ci-dessous :

  1. undefined : si la valeur n'est pas définie et qu'elle est undefined
  2. null : s'il est nul, par exemple si un élément du DOM n'existe pas...
  3. chaîne vide : ''
  4. 0 : nombre zéro
  5. NaN : n'est pas un nombre
  6. false

0voto

Kishan Points 76

Essayez ceci si array[index] est nul

if (array[index] != null)

0voto

Pristine Kallio Points 156

Avec Lodash, vous pouvez faire :

if(_.has(req,'documents')){
      if (req.documents.length)
      _.forEach(req.documents, function(document){
        records.push(document);
      });
} else {
}

if(_.has(req,'documents')) sert à vérifier si notre objet de requête a une propriété nommée documents et si c'est le cas, le prochain if (req.documents.length) sert à valider s'il ne s'agit pas d'un tableau vide, afin que les autres opérations comme forEach puissent être exécutées.

0voto

Luke Points 82

Pour vérifier si cela n'a jamais été défini ou s'il a été supprimé :

if(typeof arrayName[index]==="undefined"){
     //l'index n'est pas dans le tableau
}

fonctionne également avec les tableaux associatifs et les tableaux où vous avez supprimé certains index

Pour vérifier s'il n'a jamais été défini, s'il a été supprimé ou s'il s'agit d'une valeur nulle ou logiquement vide (NaN, chaîne vide, faux) :

if(typeof arrayName[index]==="undefined"||arrayName[index]){
     //l'index n'est pas défini ou la valeur est vide
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X