2010-08-06 7 views
26

Possible en double un tableau associatif carte /:
How do I test for an empty Javascript object from JSON?Javascript: Vérifier si un objet n'a pas de propriétés ou si est vide

est-il un moyen facile de vérifier si un objet n'a pas de propriétés, en Javascript? Ou en d'autres termes, un moyen facile de vérifier si une carte/tableau associatif est vide? Par exemple, disons que vous avez eu les suivantes:

var nothingHere = {}; 
var somethingHere = {foo: "bar"}; 

est-il un moyen facile de dire que l'on est « vide »? La seule chose que je peux penser à quelque chose comme ceci:

function isEmpty(map) { 
    var empty = true; 

    for(var key in map) { 
     empty = false; 
     break; 
    } 

    return empty; 
} 

Y at-il une meilleure façon (comme une propriété native/fonction ou quelque chose)?

+0

Dupe - http://stackoverflow.com/questions/5223/length-of-javascript-associative-array –

+0

@Daniel - merci pour le lien vers cette question. J'ai essayé de chercher sur SO mais je n'ai rien trouvé. Mods - veuillez fermer cette question. Merci! –

+0

J'irais avec la solution de chryss sur la vôtre à cause de l'appel hasOwnProperty. Si quelque chose étend le prototype d'objet (ce que font beaucoup de bibliothèques), votre méthode ne renverra plus les résultats corrects car elle lira les propriétés héritées. –

Répondre

40

Essayez ceci:

function isEmpty(map) { 
    for(var key in map) { 
     return !map.hasOwnProperty(key); 
    } 
    return true; 
} 

Votre solution fonctionne aussi, mais seulement s'il n'y a pas de bibliothèque étendre le prototype Object. Cela peut ou peut ne pas être assez bon.

+0

L'appel 'hasOwnProperty' est très important ici si des bibliothèques déconnent le prototype' Object'. +1 –

+0

Merci. J'ai mis la remarque dans la solution - j'avais adopté l'appel à hasOwnPrototype pendant un moment et n'y pensais même plus. – chryss

+1

vous n'y pensez même plus et en fait vous l'appelez hasOwnPrototype. lol – Zo72

Questions connexes