284 votes

Comment obtenir la longueur de l'objet

Y a-t-il une fonction intégrée qui peut retourner la longueur d'un objet?

Par exemple, j'ai a = { 'a':1,'b':2,'c':3 } qui devrait retourner 3. Si j'utilise a.length, cela retourne undefined.

Cela pourrait être une simple fonction de boucle, mais j'aimerais savoir s'il y a une fonction intégrée?

Il y a une question connexe (Longueur d'un objet JSON) - dans la réponse choisie, l'utilisateur conseille de transformer l'objet en un tableau, ce qui n'est pas très pratique pour ma tâche.

545voto

Box9 Points 41987

Pour les navigateurs prenant en charge Object.keys(), vous pouvez simplement faire :

Object.keys(a).length;

Sinon (notamment dans IE < 9), vous pouvez parcourir l'objet vous-même avec une boucle for (x in y) :

var count = 0;
var i;

for (i in a) {
    if (a.hasOwnProperty(i)) {
        count++;
    }
}

La méthode hasOwnProperty est là pour vous assurer de ne compter que les propriétés de l'objet littéral et pas les propriétés qu'il "hérite" de son prototype.

70voto

Šime Vidas Points 59994

Cela devrait le faire :

Object.keys(a).length

Cependant, Object.keys n'est pas pris en charge dans IE8 et en dessous, Opera et FF 3.6 et en dessous.

Démonstration en direct : http://jsfiddle.net/simevidas/nN84h/

59voto

Fazle Rabbi Points 624

Peut être fait facilement avec $.map():

var len = $.map(a, function(n, i) { return i; }).length;

45voto

Philip Schweiger Points 1752

Avez-vous jeté un coup d'œil à underscore.js (http://underscorejs.org/docs/underscore.html) ? C'est une bibliothèque utilitaire avec beaucoup de méthodes utiles. Il y a une méthode size pour les collections, ainsi qu'une méthode toArray, qui pourraient vous donner ce dont vous avez besoin.

_.size({one : 1, two : 2, three : 3});
=> 3

21voto

tibalt Points 625

En résumé, voici une fonction universelle (incluant le support ie8) :

var objSize = function(obj) {
    var count = 0;

    if (typeof obj == "object") {

        if (Object.keys) {
            count = Object.keys(obj).length;
        } else if (window._) {
            count = _.keys(obj).length;
        } else if (window.$) {
            count = $.map(obj, function() { return 1; }).length;
        } else {
            for (var key in obj) if (obj.hasOwnProperty(key)) count++;
        }

    }

    return count;
};

document.write(objSize({ a: 1, b: 2, c: 3 }));
// 3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X