Wie überprüfe ich, ob ein Array-Element in Javascript vorhanden ist oder nicht?


196

Ich arbeite mit Titan, mein Code sieht folgendermaßen aus:

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

Ich übergebe einen Index an das Array currentData. Ich kann ein nicht vorhandenes Element mit dem obigen Code immer noch nicht erkennen.


1
Deine Logik ist falsch. Sie benötigen Konjunktionen ( &&) zwischen den einzelnen Bedingungen.
JK

Antworten:


376

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

dh

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

4
+1, schön. Sie können auch if(arrayName[index] === 'undefined')als Verknüpfung verwenden
AnchovyLegend

65
@ AnchovyLegend nein, das kannst du nicht! Aber du kannst verwenden if(arrayName[index] === undefined).
Denis V

18
Dies schlägt fehl, wenn das Element vorhanden ist, sein Wert jedoch nicht definiert ist. Verwenden Sie stattdessen diese Antwort -> stackoverflow.com/questions/1098040/…
Matus

wie @Matus sagte, gibt es mehr Erklärung ist hier , sollten Sie sich bewusst sein , auf.
Thiongane

1
für if (arrayName [index] === undefined) können Sie noch kürzere verwenden, wenn 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
Leider funktioniert dieser in IE 7 und darunter nicht.
Darksoulsong

4
Dies ist meiner Meinung nach die beste Antwort. Inzwischen ist IE 7 nicht mehr gewartet, daher ist es kein Problem. Obwohl ich vorschlagen werde, das Triple Equals zu verwendenif(myArray.indexOf(searchTerm) === -1)
Mauro Gava

2
Das OP suchte nach einer Angabe der angegebenen Indexnummer . Dies prüft, ob ein bestimmter Wert vorhanden ist.
Jonathan.s

6

Jemand korrigiert mich bitte, wenn ich falsch liege , aber AFAIK das Folgende ist wahr:

  1. Arrays sind wirklich nur Objekte unter der Haube von JS
  2. Somit haben sie die Prototypmethode hasOwnProperty"geerbt" vonObject
  3. hasOwnPropertyKann in meinen Tests überprüfen, ob an einem Array-Index etwas vorhanden ist.

Solange das oben Gesagte zutrifft, können Sie einfach:

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

Verwendung:

arrayHasIndex([1,2,3,4],4); Ausgänge: false

arrayHasIndex([1,2,3,4],2); Ausgänge: true


Dies funktioniert auch für undefinierte Werte und Nullwerte im Array, was bei keiner der anderen Antworten hier der Fall ist.
Jake Thakur

Vom MDN überprüft: "Wenn ein Objekt ein Array ist, kann die hasOwnProperty-Methode prüfen, ob ein Index vorhanden ist." developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Loren

3

Ich musste die Antwort von techfoobar in einen try.. catchBlock einwickeln , wie folgt :

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

... so funktionierte es jedenfalls in Chrome (ansonsten wurde der Code mit einem Fehler gestoppt).


Dies sollte nur dann mit einem Fehler "kaputt" sein, wenn die Variable arrayNameselbst (oder index) nicht vorhanden war. Der einfache Zugriff auf ein undefiniertes Array-Element sollte nicht zu einem "Fehler" führen.
MrWhite

3

Wenn Elemente eines Arrays auch einfache Objekte oder Arrays sind, können Sie eine Funktion verwenden:

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

someist der modernste Weg hier herum. Es kann auch ein myArray.some(el => el.item === element.item && el.title === element.title)
Einzeiler werden

2

Betrachten Sie das Array a:

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

Wenn Sie überprüfen möchten, ob 'name1' in a vorhanden ist, testen Sie es einfach mit in:

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

5
"var a" ist in Ihrem Fall kein Array-Objekt, sondern ein reguläres Objekt. Sollte var a = [...] sein. Ich denke, das ist es, was der Autor brauchte.
Tomazahlin

3
Auf diese Weise wird überprüft, ob in einem Objekt ein Schlüssel vorhanden ist und nicht, ob in einem Array ein Index vorhanden ist.
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

Wenn Sie underscore.js verwenden, werden diese Arten von Null- und undefinierten Prüfungen von der Bibliothek ausgeblendet.

Ihr Code sieht also so aus -

var currentData = new Array();

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

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

return true;

Es sieht jetzt viel besser lesbar aus.


Selbst wenn Ihre Antwort richtig ist, würde ich nur zweimal darüber nachdenken. Ihr Code wird nur zum Überprüfen eines leeren Werts von underscore.js abhängig. Führen Sie einfach eine einfache Wrapper-Funktion aus isset (v) {return (typeof v! == 'undefined'); }
Heroselohim

1

Einfache Möglichkeit zu überprüfen, ob ein Artikel vorhanden ist oder nicht

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
schrecklich ineffizient. Was ist, wenn ich einstelle, myArray[1000000] = 'Pear'dann wird Ihre Funktion für immer dauern.
John Henckel

1

Dieser Weg ist meiner Meinung nach am einfachsten.

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

Und vielleicht ist ein anderer Weg, es zu tun.

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
}

Was erwartest du .. was ist die Frage eigentlich?
Geeky

1

Wenn Sie nach so etwas suchen.

Hier ist der folgende Ausschnitt

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
}


Dies ist die Lösung, die ich heute in meinem Projekt verwenden werde. Ich habe keine Ahnung, warum es Downvotes gab - dies funktioniert am besten für meinen Anwendungsfall, nämlich serverseitig node.js / express. Vielen Dank
mkrufky

@mkrufky, denn dafür ist diese Frage nicht gedacht. Wir hatten schon lange die Möglichkeit Array.includeszu prüfen, ob ein Wert ein Array ist, wie z demoArray.indexOf(ArrayIndexValue) !== -1. Bei dieser Frage geht es darum zu überprüfen, ob der Index im Array vorhanden ist, was ein völlig anderes Problem darstellt
r3wt

0

Sie können dies einfach verwenden:

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

3
falsch. Was wäre, wenn tmp = [0,0,0,0]dann tmp [3] existieren sollte
John Henckel

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

Überprüfen Sie, ob das zweite Element im Array nicht definiert ist mit der typeofund Überprüfung fürundefined


0

Wenn Sie herausfinden möchten, ob in JS ein Array-Index vorhanden ist, können Sie dies am einfachsten und kürzesten durch doppelte Negation tun.

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

0

Genau dafür ist der inBediener da. Verwenden Sie es so:

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

Die akzeptierte Antwort ist falsch. Wenn der Wert bei indexlautet , wird ein falsches Negativ ausgegeben 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

Wenn boolescher Ausdruck

typeof arr[0] !== typeof undefined

ist wahr, dann ist 0 in arr enthalten


0

Dies funktioniert auch gut, wenn Sie nach Typ testen undefined.

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

Prüfung:

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.