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.

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

r3wt
fonte
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).

Senhor suíço
fonte
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;
    }
});
Yaroslav Fedoruk
fonte
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')
Amir
fonte
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')
}

Mohammed Jafar
fonte
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.

vatsal
fonte
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")
Suhail Ahmed
fonte
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');
        }
 }
AmJustSam
fonte
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
fonte
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
}

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

mewc
fonte
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
encantar
fonte
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!
}

ᆼ ᆺ ᆼ
fonte
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

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

NVRM
fonte