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.

Pradeep
la source
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
}
techfoobar
la source
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");
}
yeswanth
la source
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

r3wt
la source
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).

Swiss Mister
la source
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;
    }
});
Yaroslav Fedoruk
la source
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')
Amir
la source
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')
}

Mohammed Jafar
la source
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.

vatsal
la source
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")
Suhail Ahmed
la source
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');
        }
 }
AmJustSam
la source
1
var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(ArrayIndexValue in demoArray){
   //Array index exists
}else{
   //Array Index does not Exists
}
Vikas Kandari
la source
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
}

Geeky
la source
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');
}
Salar
la source
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

mewc
la source
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
améliorer
la source
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!
}

ᆼ ᆺ ᆼ
la source
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

Larmia
la source
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!")
}

NVRM
la source