Come verificare se l'elemento array esiste o no in JavaScript?


197

Sto lavorando con Titanium, il mio codice è simile al seguente:

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;
}

Sto passando un indice all'array currentData. Non riesco ancora a rilevare un elemento inesistente usando il codice sopra.


1
La tua logica è sbagliata. Sono necessarie congiunzioni ( &&) tra le singole condizioni.
JK,

Risposte:


380

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

vale a dire

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

4
+1, carino. Puoi anche usare if(arrayName[index] === 'undefined')come scorciatoia
AnchovyLegend

67
@AnchovyLegend no, non puoi! Ma puoi usare if(arrayName[index] === undefined).
Denis V,

18
questo non riesce, se l'elemento è lì, ma il suo valore non è definito; usa invece questa risposta -> stackoverflow.com/questions/1098040/…
Matus

come ha detto @Matus, non v'è più la spiegazione qui , si dovrebbe essere consapevoli su.
S.Thiongane

1
for if (arrayName [index] === undefined) puoi usare anche uno più corto che è 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
Sfortunatamente, questo non funziona in Internet Explorer 7 e versioni precedenti.
darksoulsong,

4
Questa secondo me è la risposta migliore, ormai IE 7 non è più mantenuta, quindi non è un problema. Anche se suggerirò di usare il triplo ugualeif(myArray.indexOf(searchTerm) === -1)
Mauro Gava,

2
L'OP stava cercando di vedere se il numero indice indicato esiste. Questo sta verificando se esiste un determinato valore .
jonathan.s

6

Qualcuno, per favore, mi corregga se sbaglio, ma AFAIK è vero quanto segue:

  1. Gli array sono davvero solo oggetti sotto il cofano di JS
  2. Pertanto, hanno il metodo prototipo hasOwnProperty"ereditato" daObject
  3. nel mio test, hasOwnPropertyposso verificare se esiste qualcosa in un indice di array.

Quindi, fintanto che quanto sopra è vero, puoi semplicemente:

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

utilizzo:

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

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


Questo funziona anche con valori non definiti e nulli nell'array, cosa che nessuna delle altre risposte qui fa.
Jake Thakur,

Verificato da MDN: "Se un oggetto è un array, il metodo hasOwnProperty può verificare l'esistenza di un indice." developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Loren

3

Ho dovuto racchiudere la risposta di techfoobar in un blocco try.. catch, in questo modo:

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

... è così che ha funzionato in Chrome, comunque (altrimenti, il codice si è fermato con un errore).


Questo dovrebbe essere "rotto" con un errore solo se la variabile arrayNamestessa (o index) non esistesse. Il semplice accesso a un elemento array non definito non avrebbe dovuto provocare un "errore"?
MrWhite,

3

Se gli elementi dell'array sono anche semplici oggetti o array, è possibile utilizzare alcune funzioni:

// 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;
    }
});

someè il modo più moderno da queste parti. Può anche diventare un one-liner comemyArray.some(el => el.item === element.item && el.title === element.title)
vahdet,

2

Considera l'array a:

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

Se vuoi verificare se 'nome1' esiste in a, prova semplicemente con in:

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

5
"var a" non è un oggetto array nel tuo caso, ma un oggetto normale. Dovrebbe essere var a = [...]. Penso che questo sia ciò di cui l'autore aveva bisogno.
Tomazahlin,

3
Ecco come verificare l'esistenza di una chiave in un oggetto, non la presenza di un indice in un array.
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

Se si utilizza underscore.js, questo tipo di controllo null e indefinito viene nascosto dalla libreria.

Quindi il tuo codice sarà simile a questo:

var currentData = new Array();

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

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

return true;

Sembra molto più leggibile ora.


Anche se la tua risposta è giusta, ci penserei due volte per questo. Il codice diventerebbe underscore.js dipendente solo per il controllo di un valore vuoto. Basta fare una semplice funzione wrapper isset (v) {return (typeof v! == 'undefined'); }
Heroselohim,

1

Un modo semplice per verificare la presenza o meno dell'elemento

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
orribilmente inefficiente. e se impostassi la myArray[1000000] = 'Pear'tua funzione durerà per sempre.
John Henckel,

1

Questo è il modo più semplice secondo me.

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');
}

E forse un altro modo per farlo è.

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
}

Cosa ti aspetti ... qual è la domanda in realtà?
Geeky,

1

Se stai cercando qualcosa del genere.

Ecco il seguente frammento

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
}


Questa è la soluzione che userò nel mio progetto oggi. Non ho idea del perché ci siano dei voti negativi: questo funziona meglio per il mio caso d'uso, che è node.js / express sul lato server. Grazie
mkrufky il

@mkrufky perché non è questa la domanda. abbiamo a lungo avuto la possibilità prima di Array.includesverificare se un valore è un array, come demoArray.indexOf(ArrayIndexValue) !== -1. questa domanda riguarda il controllo dell'esistenza dell'indice nell'array, che è un problema completamente diverso
r3wt

0

puoi semplicemente usare questo:

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

3
sbagliato. e se tmp = [0,0,0,0]dovesse esistere tmp [3]
John Henckel,

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

Controllare se il secondo elemento dell'array non è definito utilizzando typeofe controllandoundefined


0

Quando si cerca di scoprire se esiste un indice di array in JS, il modo più semplice e veloce per farlo è attraverso la doppia negazione.

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

0

Questo è esattamente ciò inche serve all'operatore. Usalo in questo modo:

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

La risposta accettata è errata, darà un falso negativo se il valore in indexè 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

Se espressione booleana

typeof arr[0] !== typeof undefined

è vero quindi 0 è contenuto in arr


0

Funziona anche bene, testando per tipo contro undefined.

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

Test:

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.