¿Cómo verificar si el elemento de matriz existe o no en javascript?

197

Estoy trabajando con Titanium, mi código se ve así:

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

Estoy pasando un índice a la matriz currentData. Todavía no puedo detectar un elemento no existente usando el código anterior.

Pradeep
fuente
1
Tu lógica está mal. Necesita conjunciones ( &&) entre las condiciones individuales.
JK

Respuestas:

380

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

es decir

if(typeof arrayName[index] === 'undefined') {
    // does not exist
}
else {
    // does exist
}
techfoobar
fuente
44
+1, bien. También puedes usarlo if(arrayName[index] === 'undefined')como atajo
AnchovyLegend
67
@AnchovyLegend no, no puedes! Pero puedes usar if(arrayName[index] === undefined).
Denis V
18
esto falla si el elemento está allí, pero su valor no está definido; use esta respuesta en su lugar -> stackoverflow.com/questions/1098040/…
Matus
como dijo @Matus, hay más explicaciones aquí , debe tener en cuenta.
S. Thhiongane
1
para if (arrayName [index] === undefined) puede usar uno aún más corto que es 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
fuente
2
Desafortunadamente, este no funciona en IE 7 y versiones inferiores.
darksoulsong
44
En mi opinión, esta es la mejor respuesta, por ahora IE 7 ya no se mantiene, por lo que no es un problema. Aunque sugeriré usar los triples igualesif(myArray.indexOf(searchTerm) === -1)
Mauro Gava
2
El OP estaba buscando ver si existe el número de índice dado . Esto está verificando si existe un valor dado .
jonathan.s
6

Alguien corríjame si estoy equivocado, pero AFAIK lo siguiente es cierto:

  1. Las matrices son realmente solo objetos bajo el capó de JS
  2. Por lo tanto, tienen el método prototipo hasOwnProperty"heredado" deObject
  3. en mis pruebas, hasOwnPropertypuedo verificar si existe algo en un índice de matriz.

Entonces, siempre que lo anterior sea cierto, simplemente puede:

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

uso:

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

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

r3wt
fuente
Esto también funciona para valores indefinidos y nulos en la matriz, que ninguna de las otras respuestas aquí hacen.
Jake Thakur el
Verificado de MDN: "Si un objeto es una matriz, el método hasOwnProperty puede verificar si existe un índice". developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Loren
3

Tuve que ajustar la respuesta de techfoobar en un try.. catchbloque, así:

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

... así es como funcionaba en Chrome, de todos modos (de lo contrario, el código se detuvo con un error).

Señor suizo
fuente
Esto solo debería haberse "roto" con un error si la variable en arrayNamesí (o index) no existiera. ¿Simplemente acceder a un elemento de matriz indefinido no debería haber resultado en un "error"?
MrWhite
3

Si los elementos de la matriz también son objetos simples o matrices, puede usar alguna función:

// 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
fuente
somees el camino más moderno por aquí. También puede convertirse en una myArray.some(el => el.item === element.item && el.title === element.title)
frase única
2

Considere la matriz a:

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

Si desea verificar si 'name1' existe en a, simplemente pruébelo con in:

if('name1' in a){
console.log('name1 exists in a')
}else
console.log('name1 is not in a')
Amir
fuente
55
"var a" no es un objeto de matriz en su caso, sino un objeto normal. Debe ser var a = [...]. Creo que esto es lo que el autor necesitaba.
tomazahlin
3
Así es como verificar la existencia de una clave en un objeto, no la presencia de un índice en una matriz.
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
fuente
1

Si usa underscore.js, la biblioteca oculta este tipo de verificación nula e indefinida.

Entonces su código se verá así:

var currentData = new Array();

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

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

return true;

Parece mucho más legible ahora.

vatsal
fuente
Incluso si su respuesta es correcta, lo pensaría dos veces para esto. Su código dependerá de subrayar.js solo para verificar un valor vacío. Simplemente haga una función de contenedor simple isset (v) {return (typeof v! == 'undefined'); }
Heroselohim
1

Manera simple de verificar si el artículo existe o no

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
fuente
3
horriblemente ineficiente. ¿Qué pasa si configuro myArray[1000000] = 'Pear'tu función?
John Henckel
1

Este camino es el más fácil en mi opinión.

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

Y tal vez otra forma de hacerlo es.

nameList.forEach(function(ItemList)
 {
   if(ItemList.name == 'item1')
        {
          alert('Item Exist');
        }
 }
AmJustSam
fuente
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
fuente
¿Qué esperas ... cuál es la pregunta en realidad?
Geeky
1

Si buscas algo como esto.

Aquí está el siguiente fragmento

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
}

Geek
fuente
Esta es la solución que voy a usar en mi proyecto hoy. No tengo idea de por qué hubo votos negativos: esto funciona mejor para mi caso de uso, que es node.js / express del lado del servidor. Gracias
mkrufky
@mkrufky porque esa no es la razón de esta pregunta. Hace tiempo que teníamos la capacidad Array.includesde comprobar si un valor es una matriz, como demoArray.indexOf(ArrayIndexValue) !== -1. esta pregunta es acerca de la comprobación si existe el índice de la matriz, que es un problema totalmente diferente
r3wt
0

simplemente puedes usar esto:

var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index]){
    console.log(tmp[index] + '\n');
}else{
    console.log(' does not exist');
}
Salar
fuente
3
incorrecto. ¿y si tmp = [0,0,0,0]entonces tmp [3] debería existir
John Henckel
0
(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

Compruebe si el segundo elemento de la matriz está indefinido utilizando typeofy comprobandoundefined

mewc
fuente
0

Al intentar averiguar si existe un índice de matriz en JS, la forma más fácil y más corta de hacerlo es a través de la doble negación.

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

Para esto es exactamente el inoperador. Úselo así:

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

La respuesta aceptada es incorrecta, dará un falso negativo si el valor en indexes 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!
}

ᆼ ᆺ ᆼ
fuente
0
const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

Si expresión booleana

typeof arr[0] !== typeof undefined

es cierto, entonces 0 está contenido en arr

Larmia
fuente
0

Esto también funciona bien, probando por tipo contra undefined.

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

Prueba:

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

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

NVRM
fuente