En Python, où se [2]
trouve une liste, le code suivant donne cette sortie:
[2] * 5 # Outputs: [2,2,2,2,2]
Existe-t-il un moyen simple de le faire avec un tableau en JavaScript?
J'ai écrit la fonction suivante pour le faire, mais y a-t-il quelque chose de plus court ou de meilleur?
var repeatelem = function(elem, n){
// returns an array with element elem repeated n times.
var arr = [];
for (var i = 0; i <= n; i++) {
arr = arr.concat(elem);
};
return arr;
};
javascript
arrays
repeat
Curious2learn
la source
la source
Réponses:
Vous pouvez le faire comme ceci:
Il double le tableau à chaque itération, de sorte qu'il peut créer un tableau vraiment grand avec peu d'itérations.
Remarque: Vous pouvez également améliorer considérablement votre fonction en utilisant
push
au lieu deconcat
, commeconcat
cela créera un nouveau tableau à chaque itération. Comme ceci (montré juste comme un exemple de la façon dont vous pouvez travailler avec des tableaux):la source
arr = new Array(len);
, puis de les affecter par index dans la boucle, c'est-à-direarr[i] = value;
. De cette façon, vous ne payez que O (n) plutôt que de devoir réallouer le tableau à mesure qu'il grandit. En général, il est toujours préférable d'éviter de développer des tableaux en les ajoutant si possible. Si vous connaissez la taille finale, utilisez-la.Array.from({length:5}).map(x => 2)
En utilisant ES6 Matrice de remplissage () Méthode
la source
Array(5).fill([1,2,3]).flat()
. Notez que flat () est toujours très expérimental et le support du navigateur est médiocre.fill
est évalué une fois, doncArray(9).fill(someMutable)
crée neuf références àsomeMutable
dans le tableau (une mutation mutant «toutes»).la source
Array(...Array(10)).map(() => 5)
avec l'opérateur de propagation ou aussi versArray.from(Array(10)).map(() => 5)
Array.from({length: 10}, () => 5);
lenght = 10
sans propriétés énumérables..map
ne fonctionne que sur les propriétés énumérables. La.apply
méthode prend ce tableau et le mappe dans unarguments array
(un objet de type tableau) à transmettre à laArray
fonction constructeur. Le tableau d'arguments ne peut pas être clairsemé, donc les propriétés manquantes sont définies surundefined
et deviennent énumérables. Maintenant, nous pouvons utiliser.map
comme prévutu peux essayer:
Mise à jour (01/06/2018) :
Vous pouvez maintenant répéter un ensemble de caractères.
Remarque: Vérifiez plus sur fill (...) et from (...) pour la compatibilité et la prise en charge du navigateur.
Mise à jour (05/11/2019) :
Une autre façon, sans utiliser
fill
oufrom
, qui fonctionne pour une chaîne de n'importe quelle longueur:la source
Array.from({length:5}, i => 1) // [1, 1, 1, 1, 1]
ou créer un tableau avec une valeur croissante
Array.from({length:5}, (e, i)=>i) // [0, 1, 2, 3, 4]
la source
Array.from({length:5}, i => 1)
=>i
est estundefined
car il représente une valeur videArray.from({length:5}, (e, i)=>i)
=>e
estundefined
car il représente une valeur vide. Ça devrait êtreArray.from({length:5}, v => 1)
etArray.from({length:5}, (v, i)=>i)
En lodash ce n'est pas si mal:
EDIT : Encore mieux:
EDIT : Encore mieux:
la source
[c] * n
peut s'écrire:donc pour
[2] * 5
la source
Vous pouvez également étendre les fonctionnalités d'Array comme suit:
Je dois noter que l'extension des fonctionnalités des objets intégrés peut provoquer des problèmes si vous travaillez avec des bibliothèques tierces. Considérez toujours cela dans vos décisions.
la source
fill
chaque index du tableau fera référence au même objet, donc en changer un les changera tous. Ce n'est pas trop difficile à résoudre si cela devient un problème.if (!Array.prototype.fill) { }
Dans Node.js REPL:
la source
Array.from({length: 5}, x => 2);
réf. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Using_arrow_functions_and_Array.fromSi vous devez répéter plusieurs fois un tableau :
inspiré par cette réponse
la source
Pas de moyen plus simple. Vous devez créer une boucle et pousser des éléments dans le tableau.
la source
push
mieux ouconcat
mieux, en termes d'efficacité?Utilisez cette fonction:
Ou pour une version plus compacte:
Ou pour une version curry:
Vous pouvez utiliser cette fonction avec une liste:
la source
Si vous devez répéter un tableau, utilisez ce qui suit.
reviendra
la source
Un autre doublure:
la source
Cette fonction crée un tableau d'éléments (longueur) où chaque élément est égal à (valeur) tant que (valeur) est un entier ou une chaîne d'un entier. Tous les nombres décimaux seront tronqués. Si vous voulez des nombres décimaux, remplacez "parseInt ( " par " parseFloat ( "
Exemples:
la source
J'ai eu des problèmes avec les méthodes mentionnées lorsque j'utilise un tableau comme
Pour l'obtenir, j'utilise:
la source
cycle
.J'ai découvert cela aujourd'hui en essayant de créer un tableau 2D sans utiliser de boucles. Rétrospectivement, rejoindre un nouveau tableau est bien; J'ai essayé de mapper un nouveau tableau, ce qui ne fonctionne pas car la carte saute les emplacements vides.
Le caractère "#" peut être n'importe quel caractère unique valide. Le 5 serait une variable pour le nombre d'éléments que vous souhaitez. Le 7 serait la valeur avec laquelle vous souhaitez remplir votre tableau.
La nouvelle méthode de remplissage est meilleure, et lorsque j'ai codé cela, je ne savais pas qu'elle existait et je ne savais pas que répéter était es6; Je vais écrire un article de blog sur l'utilisation de cette astuce en tandem avec réduire pour faire des choses sympas.
http://jburger.us.to/2016/07/14/functionally-create-a-2d-array/
la source
Essaye ça:
la source
la source
Si vous utilisez une ceinture utlity comme lodash / underscore, vous pouvez le faire comme ceci :)
la source
Peut également être utilisé comme doublure:
la source
Améliorant la réponse de Vivek , cela fonctionne pour des chaînes de n'importe quelle longueur, pour remplir un tableau de longueur n:
Array(n+1).join('[string to be repeated][separator]').split('[separator]').slice(0, n)
la source
J'avais besoin d'un moyen de répéter / boucler un tableau (avec n éléments) m fois.
Par exemple, distribuer une liste (de personnes) à une semaine / mois. Disons que j'ai 3 noms, et je veux qu'ils répètent dans une semaine:
la source