Supposons que j'ai l'objet suivant en JavaScript:
var object = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
};
Comment savoir combien de valeurs existent dans l'objet?
Il n'y a pas de réponse facile, car Object
- d'où provient chaque objet de JavaScript - inclut automatiquement de nombreux attributs et l'ensemble exact d'attributs que vous obtenez dépend de l'interpréteur spécifique et du code exécuté avant le vôtre. Donc, vous devez en quelque sorte séparer ceux que vous avez définis de ceux que vous avez obtenus "gratuitement".
Voici un moyen:
var foo = {"key1": "value1", "key2": "value2", "key3": "value3"};
Object.prototype.foobie = 'bletch'; // add property to foo that won't be counted
var count = 0;
for (var k in foo) {
if (foo.hasOwnProperty(k)) {
++count;
}
}
alert("Found " + count + " properties specific to foo");
La deuxième ligne montre comment un autre code peut ajouter des propriétés à tous les dérivés Object
. Si vous supprimez la coche hasOwnProperty()
à l'intérieur de la boucle, le nombre de propriétés atteindra au moins 4. Sur une page avec un code JavaScript autre que ce code, il pourrait être supérieur à 4, si cet autre code modifie également le code Object
prototype.
Vous pouvez le faire en utilisant ce code simple:
Object.keys(myObject).length
Utilisez la bibliothèque nderscore , très utile: _.keys(obj).length
.
Vous pouvez parcourir l'objet pour obtenir les clés ou les valeurs:
function numKeys(obj)
{
var count = 0;
for(var prop in obj)
{
count++;
}
return count;
}
Cela ressemble à une "faute d’orthographe", mais je tiens simplement à souligner que votre exemple est une syntaxe non valide.
var object = {"key1":"value1","key2":"value2","key3":"value3"};
var miobj = [
{"padreid":"0", "sw":"0", "dtip":"UNO", "datos":[]},
{"padreid":"1", "sw":"0", "dtip":"DOS", "datos":[]}
];
alert(miobj.length) //=== 2
mais
alert(miobj[0].length) //=== undefined
cette fonction est très bonne
Object.prototype.count = function () {
var count = 0;
for(var prop in this) {
if(this.hasOwnProperty(prop))
count = count + 1;
}
return count;
}
alert(miobj.count()) // === 2
alert(miobj[0].count()) // === 4
Cette fonction utilise la propriété __count__
de Mozilla si elle est disponible, car elle est plus rapide que d’itérer sur chaque propriété.
function countProperties(obj) {
var count = "__count__",
hasOwnProp = Object.prototype.hasOwnProperty;
if (typeof obj[count] === "number" && !hasOwnProp.call(obj, count)) {
return obj[count];
}
count = 0;
for (var prop in obj) {
if (hasOwnProp.call(obj, prop)) {
count++;
}
}
return count;
};
countProperties({
"1": 2,
"3": 4,
"5": 6
}) === 3;
EDIT: cela entraînera des erreurs avec jQuery, ainsi que d'autres inconvénients. VOUS NE DEVEZ PAS L'UTILISER.: (Peut-être que l'on pourrait ajouter une méthode privée à la place d'une fonction de propriété publique, ce serait OK, mais n’avez pas le temps maintenant). Communauté wikied
ne pas utiliser:
Même si l'objet javascript n'a pas la fonction count par défaut, les classes sont facilement extensibles, et on peut l'ajouter soi-même:
Object.prototype.count = function () {
var count = 0;
for(var prop in this) {
if(this.hasOwnProperty(prop))
count = count + 1;
}
return count;
}
Pour qu'après cela on puisse exécuter
var object = {'key1': 'val1', 'key2':'val2', 'key3':'val3'};
console.log(object.count()); // 3
En conclusion, si vous souhaitez compter la fonctionnalité de décompte dans les objets, vous devez copier le code du bloc de code 1 et le coller au début du temps d'exécution (avant d'appeler le décompte).
Laissez-moi savoir si cela fonctionne pour vous!
Cordialement, Pedro
Pour ceux qui liront cette question/réponse, voici une implémentation JavaScript de la collection de dictionnaires très similaire à celle de .NET: JavaScript Dictionary