Comment vérifier si l'élément de tableau existe ou non en javascript?


197

Je travaille avec Titanium, mon code ressemble à ceci:

var currentData = new Array();

if(currentData[index]!==""||currentData[index]!==null||currentData[index]!=='null')
{
    Ti.API.info("is exists  " + currentData[index]);
    return true;
}
else
{   
    return false;
}

Je passe un index au tableau currentData. Je ne parviens toujours pas à détecter un élément inexistant à l'aide du code ci-dessus.


1
Votre logique est fausse. Vous avez besoin de conjonctions ( &&) entre les conditions individuelles.
JK

Réponses:


380

Utilisation typeof arrayName[index] === 'undefined'

c'est à dire

if(typeof arrayName[index] === 'undefined') {
    // does not exist
}
else {
    // does exist
}

4
+1, sympa. Vous pouvez également l'utiliser if(arrayName[index] === 'undefined')comme raccourci
AnchovyLegend

67
@AnchovyLegend non, vous ne pouvez pas! Mais vous pouvez utiliser if(arrayName[index] === undefined).
Denis V

18
cela échoue, si l'élément est là, mais sa valeur n'est pas définie; utilisez plutôt cette réponse -> stackoverflow.com/questions/1098040/…
Matus

comme l'a dit @Matus, il y a plus d'explications ici , vous devriez en être conscient.
S.Thiongane

1
pour if (arrayName [index] === indéfini), vous pouvez en utiliser un plus court qui est if (! arrayName [index])
Park JongBum

84
var myArray = ["Banana", "Orange", "Apple", "Mango"];

if (myArray.indexOf(searchTerm) === -1) {
  console.log("element doesn't exist");
}
else {
  console.log("element found");
}

2
Malheureusement, celui-ci ne fonctionne pas dans IE 7 et les versions antérieures.
darksoulsong

4
À mon avis, c'est la meilleure réponse, maintenant IE 7 n'est plus intégré, donc ce n'est pas un problème. Bien que je propose d'utiliser le triple égalif(myArray.indexOf(searchTerm) === -1)
Mauro Gava

2
L'OP cherchait à voir si le numéro d' index donné existe. Ceci vérifie si une valeur donnée existe.
jonathan.s

6

Quelqu'un, s'il vous plaît, corrigez-moi si je me trompe, mais AFAIK, ce qui suit est vrai:

  1. Les tableaux ne sont vraiment que des objets sous le capot de JS
  2. Ainsi, ils ont la méthode prototype hasOwnProperty"héritée" deObject
  3. dans mes tests, hasOwnPropertypeut vérifier si quelque chose existe à un index de tableau.

Donc, tant que ce qui précède est vrai, vous pouvez simplement:

const arrayHasIndex = (array, index) => Array.isArray(array) && array.hasOwnProperty(index);

usage:

arrayHasIndex([1,2,3,4],4); les sorties: false

arrayHasIndex([1,2,3,4],2); les sorties: true


Cela fonctionne également pour les valeurs non définies et nulles dans le tableau, ce qu'aucune des autres réponses ici ne fait.
Jake Thakur

Vérifié à partir de MDN: "Si un objet est un tableau, la méthode hasOwnProperty peut vérifier si un index existe." developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Loren

3

J'ai dû envelopper la réponse de techfoobar dans un bloc try.. catch, comme ceci:

try {
  if(typeof arrayName[index] == 'undefined') {
    // does not exist
  }
  else {
  // does exist
  }
} 
catch (error){ /* ignore */ }

... c'est de cette façon que cela fonctionnait dans le chrome (sinon, le code s'est arrêté avec une erreur).


Cela ne devrait avoir "cassé" avec une erreur que si la variable arrayNameelle-même (ou index) n'existait pas. Le simple accès à un élément de tableau non défini n'aurait pas dû entraîner une "erreur"?
MrWhite

3

Si les éléments du tableau sont également des objets ou des tableaux simples, vous pouvez utiliser une fonction:

// search object
var element = { item:'book', title:'javasrcipt'};

[{ item:'handbook', title:'c++'}, { item:'book', title:'javasrcipt'}].some(function(el){
    if( el.item === element.item && el.title === element.title ){
        return true; 
     } 
});

[['handbook', 'c++'], ['book', 'javasrcipt']].some(function(el){
    if(el[0] == element.item && el[1] == element.title){
        return true;
    }
});

someest le moyen le plus moderne ici. Il peut également devenir un myArray.some(el => el.item === element.item && el.title === element.title)
vol simple

2

Considérez le tableau a:

var a ={'name1':1, 'name2':2}

Si vous voulez vérifier si 'name1' existe dans a, testez-le simplement avec in:

if('name1' in a){
console.log('name1 exists in a')
}else
console.log('name1 is not in a')

5
"var a" n'est pas un objet tableau dans votre cas, mais un objet normal. Doit être var a = [...]. Je pense que c'est ce dont l'auteur avait besoin.
tomazahlin

3
Voici comment vérifier l'existence d'une clé dans un objet, pas la présence d'un index dans un tableau.
Ben Hull

2

var fruits = ["Banana", "Orange", "Apple", "Mango"];
if(fruits.indexOf("Banana") == -1){
    console.log('item not exist')
} else {
	console.log('item exist')
}


1

Si vous utilisez underscore.js, ce type de vérification nulle et non définie est masqué par la bibliothèque.

Donc, votre code ressemblera à ceci -

var currentData = new Array();

if (_.isEmpty(currentData)) return false;

Ti.API.info("is exists  " + currentData[index]);

return true;

Cela semble beaucoup plus lisible maintenant.


Même si votre réponse est juste, j'y réfléchirais à deux fois. Votre code ne dépendrait de underscore.js que pour vérifier une valeur vide. Faites simplement une simple fonction wrapper isset (v) {return (typeof v! == 'undefined'); }
Heroselohim

1

Un moyen simple de vérifier que l'article existe ou non

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--)
       if (this[i] == obj)
       return true;
    return false;
}

var myArray= ["Banana", "Orange", "Apple", "Mango"];

myArray.contains("Apple")

3
horriblement inefficace. que se passe-t-il si je règle myArray[1000000] = 'Pear'alors votre fonction prendra une éternité.
John Henckel

1

À mon avis, cette méthode est la plus simple.

var nameList = new Array('item1','item2','item3','item4');

// Using for loop to loop through each item to check if item exist.

for (var i = 0; i < nameList.length; i++) {
if (nameList[i] === 'item1') 
{   
   alert('Value exist');
}else{
   alert('Value doesn\'t exist');
}

Et peut-être une autre façon de le faire est.

nameList.forEach(function(ItemList)
 {
   if(ItemList.name == 'item1')
        {
          alert('Item Exist');
        }
 }

1
var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(ArrayIndexValue in demoArray){
   //Array index exists
}else{
   //Array Index does not Exists
}

Qu'attendez-vous ... quelle est la question en fait?
Geeky

1

Si vous cherchez quelque chose comme ça.

Voici l'extrait suivant

var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(demoArray.includes(ArrayIndexValue)){
alert("value exists");
   //Array index exists
}else{
alert("does not exist");
   //Array Index does not Exists
}


C'est la solution que je vais utiliser dans mon projet aujourd'hui. Je ne sais pas pourquoi il y a eu des downvotes - cela fonctionne mieux pour mon cas d'utilisation, qui est node.js / express côté serveur. Merci
mkrufky

@mkrufky parce que ce n'est pas le but de cette question. nous avons depuis longtemps la possibilité avant de Array.includesvérifier si une valeur est un tableau, comme demoArray.indexOf(ArrayIndexValue) !== -1. cette question consiste à vérifier si l'index existe dans le tableau, ce qui est un problème entièrement différent
r3wt

0

vous pouvez simplement utiliser ceci:

var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index]){
    console.log(tmp[index] + '\n');
}else{
    console.log(' does not exist');
}

3
faux. et si tmp = [0,0,0,0]tmp [3] devait exister
John Henckel

0
(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

Vérifiez si le deuxième élément du tableau n'est pas défini à l'aide de typeofet en vérifiantundefined


0

Lorsque vous essayez de savoir si un index de tableau existe dans JS, le moyen le plus simple et le plus court de le faire consiste à effectuer une double négation.

let a = [];
a[1] = 'foo';
console.log(!!a[0])   // false
console.log(!!a[1])   // true

0

C'est exactement à cela que insert l' opérateur. Utilisez-le comme ceci:

if (index in currentData) 
{ 
    Ti.API.info(index + " exists: " + currentData[index]);
}

La réponse acceptée est fausse, elle donnera un faux négatif si la valeur à indexest undefined:

const currentData = ['a', undefined], index = 1;

if (index in currentData) {
  console.info('exists');
}
// ...vs...
if (typeof currentData[index] !== 'undefined') {
  console.info('exists');
} else {
  console.info('does not exist'); // incorrect!
}


0
const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

Si expression booléenne

typeof arr[0] !== typeof undefined

est vrai alors 0 est contenu dans arr


0

Cela fonctionne également très bien, en testant par type contre undefined.

if (currentData[index] === undefined){return}

Tester:

const fruits = ["Banana", "Orange", "Apple", "Mango"];

if (fruits["Raspberry"] === undefined){
  console.log("No Raspberry entry in fruits!")
}

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.