Les tableaux ont une propriété "length" par défaut.
Puis-je leur ajouter des propriétés personnalisées ?
Sans avoir à en faire des objets.
Les tableaux ont une propriété "length" par défaut.
Puis-je leur ajouter des propriétés personnalisées ?
Sans avoir à en faire des objets.
Comme le disent d'autres réponses, c'est parfaitement possible, car les tableaux en JavaScript ne sont que des objets. Cependant, il reste la question de savoir si c'est une bonne idée ou non.
C'est une question de "style de codage", donc c'est difficile à dire objectivement, mais Douglas Crockford n'y voit pas d'inconvénient (du moins dans certains cas). Dans JavaScript: The Good Parts, il utilise en fait l'exemple d'ajouter une méthode "total" à un tableau.
Parce qu'un tableau est vraiment un objet, nous pouvons ajouter des méthodes directement à un tableau individuel :
// Donner à l'array de données une fonction total data.total = function () { return this.reduce(add, 0); }; total = data.total(); // le total est de 108
Comme la chaîne
'total'
n'est pas un entier, ajouter une propriététotal
à un tableau ne change pas sa longueur.
(p62, "JavaScript The Good Parts" de Crockford, trouvé sur Google Books)
Cependant, il convient de mentionner que ces propriétés supplémentaires ne sont pas incluses dans la sérialisation JSON, et seraient jetées si vous faites quelque chose comme arr = arr.slice(1);
.
Si vous vouliez le cacher dans un tableau, etc. (c'est du moins ce que je cherchais) :
Object.defineProperty(targ, "myVal", { enumerable: false, writable: true } );
Ensuite, le tableau ne l'ajoute pas à sa longueur, donc c'est une propriété, pas une valeur je suppose.
Si vous souhaitez voir les clés dans un objet par exemple, Object.keys ne le verra pas, mais _Reflect.ownKeys()_ le fera.
La version Reflect de defineProperty renverra succès ou échec, tandis que celle de Object renvoie l'objet passé.
N'oubliez pas que _Reflect.preventExtensions()_ empêchera (comme son nom l'indique) de les étendre.
Les tableaux sont des objets et vous pouvez donc ajouter vos propres propriétés:
var arr = [1, 2, 3];
arr.foo = 'bar';
En prolongeant les autres réponses, voici les différentes façons d'itérer sur le tableau, en excluant les propriétés personnalisées.
Utilisation d'une boucle for standard
for (let i = 0; i < arr_length; i++)
console.log(arr[i]);
ou si vous n'utilisez pas ES6:
for (var i = 0; i < arr.length; i++)
console.log(arr[i]);
Utilisation de la boucle for ...of
(ES6+)
for (let el of arr)
console.log(el)
Utilisation de Array.prototype.forEach
(ES6+)
arr.forEach(el => console.log(el));
ou
arr.forEach(function(el) {
console.log(el);
});
Itérer sur le tableau, incluant toutes les propriétés (par exemple, les propriétés personnalisées, length
):
for (let prop in arr)
console.log(prop);
Ou si vous n'utilisez pas ES6:
for (var prop in arr)
console.log(prop);
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.