webentwicklung-frage-antwort-db.com.de

Prüfen Sie, ob das Array leer ist oder existiert

Beim ersten Laden der Seite muss ich prüfen, ob image_array last last image geladen ist, andernfalls blockieren Sie die Vorschau-Schaltflächen. Benutzer auf Push new image button aufmerksam machen; Erstellen Sie ein leeres Array, um Bilder dort abzulegen.

Das Problem ist, dass image_array in der else immer ausgelöst wird. Wenn ein Array vorhanden ist, überschreibt es es einfach, aber es wird eine Warnung ausgegeben.

if(image_array.length > 0)
    $('#images').append('<img src="'+image_array[image_array.length-1]+'" class="images" id="1" />');
else{
    $('#prev_image').attr('disabled', 'true');
    $('#next_image').attr('disabled', 'true');
    alert('Please get new image');
    var image_array = [];
}

UPDATE Vor dem Laden von HTML habe ich so etwas

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
238
user1564141
if (typeof image_array !== 'undefined' && image_array.length > 0) {
    // the array is defined and has at least one element
}

Ihr Problem kann auf eine Mischung aus impliziten globalen Variablen und variablen Variablen zurückzuführen sein. Stellen Sie sicher, dass Sie var verwenden, wenn Sie eine Variable deklarieren:

<?php echo "var image_array = ".json_encode($images);?>
// add var  ^^^ here

Und dann stellen Sie sicher, dass Sie diese Variable später nie versehentlich neu deklarieren:

else {
    ...
    image_array = []; // no var here
}
382
jbabey

So prüfen Sie, ob ein Array leer ist oder nicht

Ein moderner Weg, ES5 +:

if (Array.isArray(array) && array.length) {
    // array exists and is not empty
}

Ein altmodischer Weg:

typeof array != "undefined"
    && array != null
    && array.length != null
    && array.length > 0

Ein kompakter Weg:

if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
    // array exists and is not empty
}

Ein CoffeeScript-Weg:

if array?.length > 0

Warum?

Fall nicht definiert
Undefinierte Variable ist eine Variable, der Sie noch nichts zugewiesen haben.

let array = new Array();     // "array" !== "array"
typeof array == "undefined"; // => true

Fall Null
Im Allgemeinen ist null der Zustand, in dem ein Wert fehlt. Beispielsweise ist eine Variable null, wenn Sie einige Daten verpasst haben oder nicht abrufen konnten.

array = searchData();  // can't find anything
array == null;         // => true

Fall kein Array
Javascript hat ein dynamisches Typsystem. Dies bedeutet, dass wir nicht garantieren können, welchen Objekttyp eine Variable enthält. Es besteht die Möglichkeit, dass wir nicht mit einer Instanz von Array sprechen.

supposedToBeArray =  new SomeObject();
typeof supposedToBeArray.length;       // => "undefined"

array = new Array();
typeof array.length;                   // => "number"

Case Empty Array
Nun, da wir alle anderen Möglichkeiten getestet haben, sprechen wir mit einer Instanz von Array. Um sicherzustellen, dass es nicht leer ist, fragen wir nach der Anzahl der Elemente, die es enthält, und stellen sicher, dass es mehr als null Elemente enthält.

firstArray = [];
firstArray.length > 0;  // => false

secondArray = [1,2,3];
secondArray.length > 0; // => true
140
Pooyan Khosravi

Wie wäre es mit (ECMA 5.1): 

if(Array.isArray(image_array) && image_array.length){
  // array exists and is not empty
}
54
Queequeg

Das ist was ich benutze. Die erste Bedingung betrifft Wahrheiten, die sowohl null als auch undefiniert sind. Die zweite Bedingung prüft, ob ein Array leer ist.

if(arrayName && arrayName.length > 0){
    //do something.
}

oder dank tsemers kommentar habe ich eine zweite version hinzugefügt

if(arrayName && arrayName.length)

Dann habe ich mit Scratchpad in Firefox einen Test für die zweite Bedingung durchgeführt:

var array1;
var array2 = [];
var array3 = ["one", "two", "three"];
var array4 = null;

console.log (array1); console.log (array2); console.log (array3); console.log (array4);

if(array1 && array1.length){
  console.log("array1! has a value!");
}

if(array2 && array2.length){
  console.log("array2! has a value!");
}

if(array3 && array3.length){
  console.log("array3! has a value!");
}

if(array4 && array4.length){
  console.log("array4! has a value!");
}

Dann die Ergebnisse:

undefined

[]

["eins zwei drei"]

null

und der abschließende Test, der zeigt

if(array2 && array2.length){

ist das gleiche wie

if(array2 && array2.length > 0){

array3! hat einen Wert!

17
James Drinkard

Du solltest benutzen: 

  if (image_array !== undefined && image_array.length > 0)
15
Samson

Wenn Sie testen möchten, ob die Image-Array-Variable definiert wurde, können Sie dies so tun

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}
8
Mike Brant

Mit isEmptyObject() von jQuery können Sie prüfen, ob das Array Elemente enthält oder nicht.

var testArray=[1,2,3,4,5]; 
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true 

Quelle: https://api.jquery.com/jQuery.isEmptyObject/

5
Mayank Raipure

JavaScript

( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )

Lodash & Underscore

( _.isArray(myArray) && myArray.length > 0 )
3
Amit Bhagat

Für mich funktionieren einige der hoch bewerteten Antworten "richtig", wenn ich sie in jsfiddle stecke, aber wenn ich eine dynamisch erzeugte Menge an Array-Listen habe, funktioniert ein Großteil dieses Codes in den Antworten für mich nicht.

Dies ist, was IS für mich arbeitet.

var from = [];

if(typeof from[0] !== undefined) {
  //...
}

Beachten Sie, dass KEINE Anführungszeichen in der Nähe von undefined stehen und ich kümmere mich nicht um die Länge.

3
Tom Stickel

Mit nterstrich oder Lodash :

_.isArray(image_array) && !_.isEmpty(image_array)

2
Umanshield

Wie wäre es damit ? Das Überprüfen der Länge eines undefinierten Arrays kann eine Ausnahme auslösen.

if(image_array){
//array exists
    if(image_array.length){
    //array has length greater than zero
    }
}
2
Nikul Patel

Ich stoße in Javascript ziemlich häufig auf dieses Problem. Für mich ist es am besten, vor der Längenprüfung einen sehr breiten Check durchzuführen. Ich habe in dieser Frage und Antwort einige andere Lösungen gesehen, aber ich wollte entweder nach null oder undefined oder nach einem anderen falschen Wert suchen.

if(!array || array.length == 0){
    console.log("Array is either empty or does not exist")
}

Dies wird zuerst auf undefined, null oder andere falsche Werte geprüft. Wenn eine davon wahr ist, wird der Boolesche Wert vervollständigt, da dies eine OR ist. Dann kann die riskantere Prüfung von array.length überprüft werden, die fehlerhaft sein kann, wenn das Array undefiniert ist. Dies wird niemals erreicht, wenn arrayundefined oder null ist, daher ist die Reihenfolge der Bedingungen sehr wichtig.

1
Jim Factor

Wenn Sie keine als Array deklarierte Variable haben, können Sie eine Prüfung erstellen:

if(x && x.constructor==Array && x.length){
   console.log("is array and filed");
}else{
    var x= [];
    console.log('x = empty array');
}

Dies prüft, ob die Variable x vorhanden ist, und prüft, ob es ein gefülltes Array ist. Andernfalls wird ein leeres Array erstellt (oder Sie können anderes tun).

Wenn Sie sure sind, wird eine Array-Variable erstellt, die eine einfache Überprüfung durchführt:

var x = [];

if(!x.length){
    console.log('empty');
} else {
    console.log('full');
}

Sie können meine Geige hier prüfen zeigt die möglichen Möglichkeiten zum Überprüfen des Arrays.

0
Plippie

Das Folgende ist meine Lösung, die in eine Funktion eingebunden ist, die auch Fehler auslöst, um einige Probleme mit dem Objektbereich und allen Arten möglicher Datentypen zu verwalten, die an die Funktion übergeben werden.

Hier ist meine Geige verwendet, um dieses Problem zu untersuchen ( Quelle )

var jill = [0];
var jack;
//"Uncaught ReferenceError: jack is not defined"

//if (typeof jack === 'undefined' || jack === null) {
//if (jack) {
//if (jack in window) {
//if (window.hasOwnP=roperty('jack')){
//if (jack in window){

function isemptyArray (arraynamed){
    //cam also check argument length
  if (arguments.length === 0) { 
    throw "No argument supplied";
  }

  //console.log(arguments.length, "number of arguments found");
  if (typeof arraynamed !== "undefined" && arraynamed !== null) {
      //console.log("found arraynamed has a value");
      if ((arraynamed instanceof Array) === true){
        //console.log("I'm an array");
        if (arraynamed.length === 0) {
            //console.log ("I'm empty");
            return true;
        } else {
          return false;
        }//end length check
      } else {
        //bad type
        throw "Argument is not an array";
      } //end type check
  } else {
    //bad argument
    throw "Argument is invalid, check initialization";;
  }//end argument check
}

try {
  console.log(isemptyArray(jill));
} catch (e) {
    console.log ("error caught:",e);
}
0
Tommie C.

Du solltest das tun

    if (!image_array) {
      // image_array defined but not assigned automatically coerces to false
    } else if (!(0 in image_array)) {
      // empty array
      // doSomething
    }
0
shivam malhotra

Eine einfache Möglichkeit, die keine Ausnahmen zur Folge hat, wenn keine vorhanden ist und die in boolean konvertiert wird

!!array

Beispiel:

if (!!arr) {
  // array exists
}
0
insign