Ελέγξτε αν ο πίνακας είναι άδειος ή δεν υπάρχει. JS

Ποιος είναι ο καλύτερος τρόπος για να ελέγξετε αν ένας πίνακας είναι άδειος ή δεν υπάρχει;

Κάτι τέτοιο;

if(array.length < 1 || array == undefined){
    //empty
}
Λύση

Θέλετε να κάνετε πρώτα τον έλεγχο για "μη ορισμένο". Εάν το κάνετε αντίστροφα, θα δημιουργηθεί σφάλμα εάν ο πίνακας είναι απροσδιόριστος.

if (array === undefined || array.length == 0) {
    // array empty or does not exist
}

Update

Αυτή η απάντηση λαμβάνει αρκετή προσοχή, οπότε θα ήθελα να επισημάνω ότι η αρχική μου απάντηση, περισσότερο από οτιδήποτε άλλο, αφορούσε τη λάθος σειρά των συνθηκών που αξιολογούνται στην ερώτηση. Υπό αυτή την έννοια, δεν αντιμετωπίζει αρκετά σενάρια, όπως οι τιμές null, άλλοι τύποι αντικειμένων με ιδιότητα length, κλπ. Επίσης, δεν είναι πολύ ιδιωματική JavaScript.

Η αλάνθαστη προσέγγιση Παίρνοντας κάποια έμπνευση από τα σχόλια, παρακάτω είναι αυτός που θεωρώ προς το παρόν ως τον αλάνθαστο τρόπο για να ελέγξετε αν ένας πίνακας είναι άδειος ή δεν υπάρχει. Λαμβάνει επίσης υπόψη ότι η μεταβλητή μπορεί να μην αναφέρεται σε έναν πίνακα, αλλά σε κάποιο άλλο τύπο αντικειμένου με ιδιότητα length.

if (!Array.isArray(array) || !array.length) {
  // array does not exist, is not an array, or is empty
  // ⇒ do not attempt to process array
}

Για να το αναλύσουμε:

  1. Η Array.isArray(), όπως είναι αναμενόμενο, ελέγχει αν το όρισμά της είναι πίνακας. Αυτό εξαλείφει τιμές όπως null, undefined και οτιδήποτε άλλο που δεν είναι πίνακας.
    Σημειώστε ότι αυτό θα εξαλείψει επίσης αντικείμενα που μοιάζουν με πίνακες, όπως το αντικείμενο arguments και τα αντικείμενα DOM NodeList. Ανάλογα με την περίπτωσή σας, αυτή μπορεί να μην είναι η συμπεριφορά που επιθυμείτε.

  2. Η συνθήκη array.length ελέγχει αν η ιδιότητα length της μεταβλητής'αξιολογείται σε μια τιμή truthy. Επειδή η προηγούμενη συνθήκη έχει ήδη καθορίσει ότι όντως έχουμε να κάνουμε με έναν πίνακα, πιο αυστηρές συγκρίσεις όπως array.length != 0 ή array.length !== 0 δεν απαιτούνται εδώ.

Η ρεαλιστική προσέγγιση Σε πολλές περιπτώσεις, τα παραπάνω μπορεί να φαίνονται υπερβολικά. Ίσως χρησιμοποιείτε μια γλώσσα υψηλότερης τάξης όπως η TypeScript που κάνει το μεγαλύτερο μέρος του ελέγχου τύπου για εσάς κατά τη μεταγλώττιση, ή πραγματικά δεν σας ενδιαφέρει αν το αντικείμενο είναι πραγματικά ένας πίνακας, ή απλά σαν πίνακας.

Σε αυτές τις περιπτώσεις, τείνω να επιλέγω την ακόλουθη, πιο ιδιωματική JavaScript:

if (!array || !array.length) {
    // array or array.length are falsy
    // ⇒ do not attempt to process array
}

Ή, πιο συχνά, το αντίστροφό της:

if (array && array.length) {
    // array and array.length are truthy
    // ⇒ probably OK to process array
}
Σχόλια (9)