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".

0voto

kjdion84 Points 2614

J'ai rencontré ce problème en utilisant les datatables de Laravel. Je stockais une valeur JSON appelée properties dans un journal d'activité et je voulais afficher un bouton en fonction de la présence ou non de cette valeur.

Eh bien, datatables interprétait cela comme un tableau s'il était vide et comme un objet s'il ne l'était pas, donc la solution suivante a fonctionné pour moi :

render: function (data, type, full) {
    if (full.properties.length !== 0) {
        // faire quelque chose
    }
}

Un objet n'a pas de propriété length.

0voto

Alex P Points 344

Je pense que cette décision est appropriée pour les gars qui préfèrent la programmation fonctionnelle déclarative à la programmation orientée objet impérative ou procédurale. Si votre question est "Y a-t-il des valeurs à l'intérieur? (une valeur truthy ou falsy)" vous pouvez utiliser la méthode .some pour valider les valeurs à l'intérieur.

[].some(el => el || !el);
  • Ce n'est pas parfait mais cela ne nécessite pas d'appliquer de fonction supplémentaire contenant la même logique, comme function isEmpty(arr) { ... }.
  • Cela reste meilleur que "Est-ce de longueur zéro?" quand nous faisons cela [].length aboutissant à 0 ce qui est dangereux dans certains cas.
  • Ou même ceci [].length > 0 en disant "Sa longueur est-elle supérieure à zéro?"

Exemples avancés:

[    ].some(el => el || !el); // false
[null].some(el => el || !el); // true
[1, 3].some(el => el || !el); // true

0voto

Matvii Stelmakh Points 11

Lorsque vous créez des valeurs de tableau vides, elles NE sont PAS indéfinies, elles sont VIDES

var arr = new Array(10); // (10) [empty × 10]

mais lorsque vous obtenez un élément par index, vous recevez undefined

arr[0]; // undefined

donc vous ne pouvez pas savoir en utilisant === si elles sont indéfinies ou vides

nous pouvons le faire en utilisant JSON.stringify, en convertissant l'ensemble du tableau il remplace les valeurs vides par null

JSON.stringify(arr); // "[null,null,null,null,null,null,null,null,null,null]"
JSON.stringify(arr[0]); // mais pour un seul élément cela renvoie undefined

donc la vraie vérification de la valeur vide :

arr[0] !== null && JSON.stringify(arr.map(item => !item)).slice(1, -1).split(',')[0] === 'null'
  1. comparer l'élément avec null (ne doit pas être égal)
  2. mapper le tableau en supprimant false au lieu des valeurs existantes (assurer que la structure en chaîne à être séparée par des virgules sans virgules redondantes)
  3. JSON.stringify tableau
  4. retirer les crochets de la chaîne
  5. diviser en tableau par virgule
  6. comparer avec null

-1voto

Vous pouvez utiliser la bibliothèque Loadsh pour le faire de manière plus efficace, comme suit :

si vous avez un tableau nommé "pets", par exemple :

var pets = ['chien', undefined, 'chat', null];

console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false

_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });

Pour vérifier toutes les valeurs du tableau pour des valeurs null ou undefined :

var pets = ['chien', undefined, 'chat', null];

console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false

_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });

Consultez plus d'exemples sur http://underscorejs.org/

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