Jak sprawdzić, czy element tablicy istnieje w javascript?

198

Pracuję z Titanium, mój kod wygląda następująco:

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

Przekazuję indeks do tablicy currentData. Nadal nie jestem w stanie wykryć nieistniejącego elementu przy użyciu powyższego kodu.

Pradeep
źródło
1
Twoja logika jest zła. Potrzebujesz spójników ( &&) między poszczególnymi warunkami.
JK

Odpowiedzi:

381

Posługiwać się typeof arrayName[index] === 'undefined'

to znaczy

if(typeof arrayName[index] === 'undefined') {
    // does not exist
}
else {
    // does exist
}
techfoobar
źródło
4
+1, miło. Możesz także użyć if(arrayName[index] === 'undefined')skrótu
AnchovyLegend
67
@AnchovyLegend nie, nie możesz! Ale możesz użyć if(arrayName[index] === undefined).
Denis V,
18
to się nie powiedzie, jeśli element tam jest, ale jego wartość jest niezdefiniowana; zamiast tego użyj tej odpowiedzi -> stackoverflow.com/questions/1098040/…
Matus
jak @Matus powiedział, że jest więcej wyjaśnień tutaj , należy pamiętać o.
S.Thiongane
1
for if (arrayName [index] === undefined) możesz użyć jeszcze krótszego, którym jest 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");
}
tak
źródło
2
Niestety ten nie działa w IE 7 i poniżej.
darksoulsong
4
To, moim zdaniem, najlepsza odpowiedź, do tej pory IE 7 nie jest już utrzymywany, więc nie stanowi problemu. Chociaż zasugeruję użycie potrójnej równościif(myArray.indexOf(searchTerm) === -1)
Mauro Gava
2
OP szukał, czy podany numer indeksu istnieje. Sprawdza, czy dana wartość istnieje.
jonathan.s
6

Niech ktoś mnie poprawi, jeśli się mylę, ale AFAIK jest prawdą:

  1. Tablice to tak naprawdę obiekty pod maską JS
  2. Zatem mają prototypową metodę hasOwnProperty„odziedziczoną”Object
  3. w moich testach hasOwnPropertymogę sprawdzić, czy coś istnieje w indeksie tablicowym.

Tak długo, jak powyższe jest prawdziwe, możesz po prostu:

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

stosowanie:

arrayHasIndex([1,2,3,4],4); wyjścia: false

arrayHasIndex([1,2,3,4],2); wyjścia: true

r3wt
źródło
Działa to również w przypadku niezdefiniowanych i pustych wartości w tablicy, czego nie robi żadna inna odpowiedź tutaj.
Jake Thakur,
Zweryfikowano z MDN: „Jeśli obiekt jest tablicą, metoda hasOwnProperty może sprawdzić, czy istnieje indeks”. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Loren
3

Musiałem zawrzeć odpowiedź techfoobar w bloku try.. catchtak:

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

... tak to w każdym razie działało w chrome (w przeciwnym razie kod zatrzymał się z błędem).

Szwajcarski Mister
źródło
Powinno to być „zepsute” z błędem, tylko jeśli arrayNamesama zmienna (lub index) nie istniała. Sam dostęp do niezdefiniowanego elementu tablicy nie powinien spowodować „błędu”?
MrWhite
3

Jeśli elementy tablicy są również proste obiekty lub tablice, można użyć jakąś funkcję:

// 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;
    }
});
Jarosław Fedoruk
źródło
somejest najbardziej nowoczesnym sposobem tutaj. Może nawet stać się jednym linerem, jakmyArray.some(el => el.item === element.item && el.title === element.title)
vahdet
2

Rozważ tablicę:

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

Jeśli chcesz sprawdzić, czy „nazwa1” istnieje w, po prostu przetestuj ją za pomocą in:

if('name1' in a){
console.log('name1 exists in a')
}else
console.log('name1 is not in a')
Amir
źródło
5
„var a” nie jest w twoim przypadku obiektem tablicowym, ale zwykłym obiektem. Powinien być var ​​a = [...]. Myślę, że tego właśnie potrzebował autor.
tomazahlin
3
W ten sposób sprawdzane jest istnienie klucza w obiekcie, a nie obecność indeksu w tablicy.
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
źródło
1

Jeśli użyjesz underscore.js, ten typ kontroli zerowej i niezdefiniowanej zostanie ukryty przez bibliotekę.

Twój kod będzie wyglądał następująco -

var currentData = new Array();

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

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

return true;

Teraz wygląda na bardziej czytelny.

vatsal
źródło
Nawet jeśli twoja odpowiedź jest prawidłowa, pomyślałbym o tym dwa razy. Twój kod stałby się underscore.js zależny tylko od sprawdzania pustej wartości. Po prostu wykonaj prostą funkcję opakowania isset (v) {return (typeof v! == 'undefined'); }
Heroselohim
1

Prosty sposób na sprawdzenie elementu istnieje lub nie

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
źródło
3
okropnie nieefektywny. co jeśli ustawię, myArray[1000000] = 'Pear'to twoja funkcja będzie trwała wiecznie.
John Henckel,
1

Moim zdaniem ten sposób jest najłatwiejszy.

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

I może innym sposobem na to jest.

nameList.forEach(function(ItemList)
 {
   if(ItemList.name == 'item1')
        {
          alert('Item Exist');
        }
 }
AmJustSam
źródło
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
źródło
Czego oczekujesz ... jakie jest pytanie?
Geeky
1

Jeśli szukasz czegoś takiego.

Oto następujący 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
}

Naukowy
źródło
To jest rozwiązanie, którego zamierzam dzisiaj użyć w moim projekcie. Nie mam pojęcia, dlaczego pojawiły się opinie negatywne - działa to najlepiej w moim przypadku użycia, czyli po stronie serwera node.js / express. Dziękuję
mkrufky,
@mkrufky, ponieważ nie o to chodzi w tym pytaniu. od dawna mieliśmy możliwość Array.includessprawdzenia, czy wartość jest tablicą demoArray.indexOf(ArrayIndexValue) !== -1. to pytanie dotyczy sprawdzenia, czy indeks istnieje w tablicy, co jest zupełnie innym problemem
r3wt
0

możesz po prostu użyć tego:

var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index]){
    console.log(tmp[index] + '\n');
}else{
    console.log(' does not exist');
}
Salar
źródło
3
źle. co jeśli tmp = [0,0,0,0]wtedy powinno istnieć tmp [3]
John Henckel
0
(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

Sprawdź, czy drugi element w tablicy jest niezdefiniowany, używając typeofi sprawdzającundefined

mewc
źródło
0

Próbując dowiedzieć się, czy indeks tablicy istnieje w JS, najłatwiejszym i najkrótszym sposobem jest podwójne zaprzeczanie.

let a = [];
a[1] = 'foo';
console.log(!!a[0])   // false
console.log(!!a[1])   // true
zaklęcie
źródło
0

Właśnie po to jest inoperator. Użyj tego w ten sposób:

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

Odpowiedź akceptowana jest źle, to dać fałszywie ujemne jeżeli wartość indexjest 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!
}

ᆼ ᆺ ᆼ
źródło
0
const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

Jeśli wyrażenie logiczne

typeof arr[0] !== typeof undefined

jest prawdą, wówczas 0 jest zawarte w arr

Larmia
źródło
0

Działa to również dobrze, testując według typu undefined.

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

Test:

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

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

NVRM
źródło