Existe-t-il un moyen plus compact de procéder à ce type d'initialisation ?
for (var i = 0; i < arraySize; i++) array[i] = value;
Existe-t-il un moyen plus compact de procéder à ce type d'initialisation ?
for (var i = 0; i < arraySize; i++) array[i] = value;
while(arraySize--) array.push(value);
pas d'initialisation (à ma connaissance)
Mise à jour
Depuis que j'ai posté cette réponse il y a 4 ans, les gens semblent revenir ici pour cette réponse. À des fins d'évaluation, j'ai fait un JSPerf avec des solutions différentes.
La solution ci-dessus n'est pas la plus rapide, mais elle est courte. Pour rester dans le même style court, mais avec une meilleure performance :
while(size--) array[size] = value;
Mise à jour février 2016 Mise à jour de la JSPerf avec une nouvelle révision avec plus de cas de test.
Si la performance n'a pas d'importance et que vous voulez une phrase toute faite :
var value = 1234, // can be replaced by a fixed value
size = 1000, // can be replaced by a fixed value
array = Array.apply(null,{length: size}).map(function() { return value; });
Une solution plus performante (en une seule, sale, ligne) : Attention : cela remplace les variables value, size et i existantes dans la portée.
for(var i = 0, value = 1234, size = 1000, array = new Array(1000); i < size; i++) array[i] = value;
Dans de nombreux cas, "arraySize" ne serait pas mutable (pourrait être une constante ou un littéral ou - je sais, mauvaise pratique - "array.length"). En représentant la taille comme une variable, j'ai rendu cette partie peu claire.
Vrai : "for(var i = arraySize ; i-- ;) array.push(value) ;" alors :-) mais je pense que vous l'avez déjà compris
L'OP semble rechercher la compacité dans un scénario à usage unique plutôt que l'efficacité et la réutilisation. Pour ceux qui recherchent l'efficacité, voici une optimisation qui n'a pas encore été mentionnée. Puisque vous connaissez la longueur du tableau à l'avance, allez-y et définissez-la avant d'assigner les valeurs. Sinon, le tableau sera redimensionné à plusieurs reprises à la volée, ce qui n'est pas idéal !
function initArray(length, value) {
var arr = [], i = 0;
arr.length = length;
while (i < length) { arr[i++] = value; }
return arr;
}
var data = initArray(1000000, false);
Je ne dirais pas que c'est aussi exact que ça : stoimen.com/blog/2012/01/24/javascript-performance-for-vs-while Il est certain que vous ne voudriez pas toujours utiliser exclusivement l'un ou l'autre - cela va à l'encontre de leur objectif. C'est le travail de l'interprète ou du compilateur d'accélérer les choses là où il le peut, pas le vôtre. Mais même cela n'est pas toujours vrai.
La méthode map() ne fonctionne que sur les valeurs du tableau. Elle ignore les éléments non définis.
Donc après new Array(5)
quand on fait une carte, n'opère-t-on pas sur un tableau ? En outre, cette [1,undefined,3].map(() => 5)
fonctionne comme prévu. Il ne saute pas undefined
for (var i = 0; i < arraySize; ++i)
a presque les mêmes performances que votre code, mais est plus propre. Mais while (arraySize--)
est 2 fois plus lent.
Non. Si vous commencez à initialiser un tableau depuis la fin, des tables de hachage seront utilisées en interne, mais si vous commencez à initialiser un tableau depuis 0, et que vous n'avez que des indices séquentiels, un vrai tableau sera utilisé (au moins dans V8). JavaScript n'alloue pas les éléments (highest_index+1), il alloue uniquement les éléments initialisés.
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.
0 votes
Duplicata possible de Le moyen le plus efficace de créer un tableau JavaScript rempli de zéro ?