Como verificar se o elemento da matriz existe ou não em javascript?


197

Estou trabalhando com Titanium, meu código fica assim:

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

Estou passando um índice para a matriz currentData. Ainda não consigo detectar um elemento inexistente usando o código acima.


1
Sua lógica está errada. Você precisa de conjunções ( &&) entre as condições individuais.
JK

Respostas:


380

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

ie

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

4
+1, legal. Você também pode usar if(arrayName[index] === 'undefined')como um atalho
AnchovyLegend

67
@AnchovyLegend não, você não pode! Mas você pode usar if(arrayName[index] === undefined).
Denis V

18
isso falhará, se o item estiver lá, mas seu valor for indefinido; use esta resposta -> stackoverflow.com/questions/1098040/…
Matus

como o @Matus disse, há mais explicações aqui , você deve estar ciente.
S.Thiongane

1
para if (arrayName [index] === indefinido) você pode usar um menor ainda que seja 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
Infelizmente, este não funciona no IE 7 e abaixo.
darksoulsong

4
Esta é, na minha opinião, a melhor resposta, agora o IE 7 não é mais mantido por isso, portanto não é um problema. Embora eu sugira usar os iguais triplosif(myArray.indexOf(searchTerm) === -1)
Mauro Gava

2
O OP estava olhando para ver se o número de índice fornecido existe. Isso está verificando se existe um determinado valor .
jonathan.s

6

Alguém me corrija se eu estiver errado, mas AFAIK é verdadeiro:

  1. Matrizes são realmente apenas objetos sob o capô do JS
  2. Assim, eles têm o método protótipo hasOwnProperty "herdado" deObject
  3. no meu teste, hasOwnProperty posso verificar se existe alguma coisa em um índice de matriz.

Portanto, desde que o acima seja verdadeiro, você pode simplesmente:

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

uso:

arrayHasIndex([1,2,3,4],4); saídas: false

arrayHasIndex([1,2,3,4],2); saídas: true


Isso também funciona para valores nulos e indefinidos na matriz, o que nenhuma das outras respostas aqui faz.
Jake Thakur

Verificado no MDN: "Se um objeto é uma matriz, o método hasOwnProperty pode verificar se existe um índice." developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…
Loren

3

Eu tive que envolver a resposta do techfoobar em um bloco try.. catch, assim:

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

... foi assim que funcionou no chrome, de qualquer maneira (caso contrário, o código parou com um erro).


Isso só deve ter "quebrado" com um erro se a arrayNameprópria variável (ou index) não existir. Simplesmente acessar um elemento de matriz indefinido não deveria ter resultado em um "erro"?
MrWhite

3

Se os elementos da matriz também são objetos ou matrizes simples, você pode usar alguma função:

// 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é a maneira mais moderna por aqui. Também pode até se tornar um one-liner comomyArray.some(el => el.item === element.item && el.title === element.title)
vahdet 15/11/19

2

Considere a matriz a:

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

Se você deseja verificar se 'name1' existe em a, basta testá-lo com in:

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

5
"var a" não é um objeto de matriz no seu caso, mas um objeto regular. Deve ser var a = [...]. Eu acho que é disso que o autor precisava.
tomazahlin

3
É assim que se verifica a existência de uma chave em um objeto, não a presença de um índice em uma 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')
}


1

Se você usar underscore.js , esse tipo de verificação nula e indefinida será ocultada pela biblioteca.

Portanto, seu código ficará assim -

var currentData = new Array();

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

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

return true;

Parece muito mais legível agora.


Mesmo se sua resposta estiver certa, eu pensaria duas vezes sobre isso. Seu código se tornaria underscore.js dependente apenas para verificar um valor vazio. Basta executar uma função simples wrapper isset (v) {return (typeof v! == 'undefined'); }
Heroselohim 26/11/14

1

Maneira simples de verificar se o item existe ou não

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
terrivelmente ineficiente. e se eu definir myArray[1000000] = 'Pear', sua função levará uma eternidade.
John Henckel

1

Este é o caminho mais fácil na minha opinião.

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 talvez outra maneira de fazer isso seja.

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
}

O que você está esperando? Qual é a questão, na verdade?
Geeky

1

Se você está procurando algo assim.

Aqui está o seguinte snippetr

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
}


Esta é a solução que vou usar no meu projeto hoje. Não tenho idéia do porquê de votos negativos - isso funciona melhor para o meu caso de uso, que é o node.js / express do servidor. Obrigado
mkrufky

@krufky, porque não é para isso que serve essa pergunta. há muito tempo tínhamos a capacidade Array.includesde verificar se um valor é uma matriz, por exemplo demoArray.indexOf(ArrayIndexValue) !== -1. esta questão consiste em verificar se o índice existe na matriz, o que é um problema completamente diferente
r3wt

0

você pode simplesmente usar isso:

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

3
errado. E se tmp = [0,0,0,0], em seguida, tmp [3] deve existir
John Henckel

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

Verifique se o segundo item da matriz está indefinido usando o typeofe verificando seundefined


0

Ao tentar descobrir se existe um índice de matriz em JS, a maneira mais fácil e mais curta de fazê-lo é através da dupla negação.

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

0

É exatamente para isso que o inoperador serve. Use-o assim:

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

A resposta aceita está errada, dará um falso negativo se o valor em indexfor 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 expressão booleana

typeof arr[0] !== typeof undefined

é verdadeiro, então 0 está contido em arr


0

Isso também funciona bem, testando por tipo contra undefined.

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

Teste:

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.