Créer un tableau avec le même élément répété plusieurs fois
En Python, où [2]
est une liste, le code suivant donne ce résultat:
[2] * 5 # Outputs: [2,2,2,2,2]
Existe-t-il un moyen facile de faire cela avec un tableau en JavaScript?
J'ai écrit la fonction suivante pour le faire, mais est-il quelque chose de plus court ou plus?
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;
};
- Double Possible: stackoverflow.com/questions/1295584/...
- double possible: stackoverflow.com/questions/1877475/repeat-character-n-times
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire comme ceci:
Il double du tableau à chaque itération, de sorte qu'il peut réellement créer un grand tableau avec quelques itérations.
Remarque: Vous pouvez également améliorer votre fonction de beaucoup de choses en utilisant
push
au lieu deconcat
, commeconcat
permettra de créer un nouveau tableau à chaque itération. Comme ceci (montré comme un exemple de la façon dont vous pouvez travailler avec des tableaux):arr = new Array(len);
, puis attribuez-leur index dans la boucle, c'est à direarr[i] = value;
. De cette façon, vous ne payez que O(n), plutôt que d'avoir à garder la réaffectation de la matrice à mesure qu'il grandit. En général, il est toujours préférable d'éviter de cultiver des tableaux en ajoutant si possible. Si vous connaissez la taille finale, l'utiliser.Array.from({length:5}).map(x => 2)
Dans l'ES6 à l'aide du Tableau fill() méthode
Array(5).fill([1,2,3]).flat()
. Notez que plat() est encore très expérimentale et de la prise en charge du navigateur est pauvre.fill
est évaluée une fois, doncArray(9).fill(someMutable)
crée neuf références àsomeMutable
dans le tableau (mutation une mutation de 'tous').Array(...Array(10)).map(() => 5)
avec la propagation de l'opérateur ou également àArray.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. Le.apply
méthode prend ce tableau, et des cartes dans unarguments array
(un tableau comme objet) pour être transmis à laArray
fonction constructeur. Le tableau arguments ne peuvent pas être rares, donc les propriétés manquantes préparez-vous àundefined
et devenir énumérable. Maintenant, nous pouvons utiliser.map
comme prévu[...Array(10)].map(()=>5)
vous pouvez essayer:
Mise à jour (01/06/2018):
Maintenant vous pouvez avoir un ensemble de caractères de la répétition.
Remarque: Vérifiez plus sur remplir(...) et à partir de(...) de compatibilité et de prise en charge du navigateur.
Array.from({length:5}, i => 1) //[1, 1, 1, 1, 1]
ou créer une matrice avec l'augmentation de la valeur
Array.from({length:5}, (e, i)=>i) //[0, 1, 2, 3, 4]
Array.from({length:5}, i => 1)
=>i
estundefined
car il représente la valeur est videArray.from({length:5}, (e, i)=>i)
=>e
estundefined
car il représente la valeur est vide. Il devrait êtreArray.from({length:5}, v => 1)
etArray.from({length:5}, (v, i)=>i)
Dans lodash c'est pas si mal:
MODIFIER: Encore mieux:
MODIFIER: Encore mieux:
[c] * n
peut être écrite comme:donc pour
[2] * 5
Vous pouvez également étendre les fonctionnalités de Tableau comme suit:
Il est à noter que l'extension de la fonctionnalité des objets intégrés peuvent causer des problèmes si vous travaillez avec de la 3e partie des bibliothèques. Pèse toujours présent dans vos décisions.
fill
chaque index dans le tableau se réfèrent au même objet, de sorte qu'un changement on va changer tous les d'entre eux. Ce n'est pas trop difficile à résoudre, si cela devient un problème.if (!Array.prototype.fill) { }
Pas de moyen plus facile. Vous avez besoin de faire une boucle et de pousser les éléments dans le tableau.
push
mieux ouconcat
mieux, en termes d'efficacité?Dans le cas où vous avez besoin de répéter une tableau plusieurs fois:
inspiré par cette réponse
Un autre one-liner:
Cette fonction crée un tableau de (longueur) des éléments où chaque élément est égal à (valeur) tant que (valeur) est un entier ou une chaîne d'un nombre entier. Tout les nombres décimaux, il sera tronqué. Si vous ne souhaitez que des nombres décimaux, remplacer "parseInt(" avec "parseFloat("
Exemples:
J'ai eu des problèmes avec les moyens mentionnés lorsque j'utilise un tableau comme
Pour obtenir ce que j'utilise:
cycle
.J'ai découvert ça aujourd'hui, tout en essayant de faire un tableau 2D sans l'aide de boucles. Rétrospectivement, l'adhésion d'un nouveau tableau est bien, j'ai essayé la cartographie d'un nouveau tableau, qui ne fonctionne pas comme la carte saute logements vides.
Le "#" char peut être valable, toute seul caractère.
Le 5 serait une variable pour le nombre d'éléments que vous le souhaitez.
Le 7 serait la valeur que vous voulez remplir votre tableau avec.
La nouvelle méthode de remplissage est mieux, et quand j'ai codé ce que je ne savais pas qu'elle existait, et je ne savais répétition est es6; je vais écrire un billet de blog sur l'utilisation de cette astuce, en tandem avec la réduire à faire des choses cool.
http://jburger.us.to/2016/07/14/functionally-create-a-2d-array/
JS:
Si vous utilisez un utlity ceinture comme lodash souligné, vous pouvez le faire comme ceci 🙂
Peut être utilisé comme un one-liner trop:
Améliorer Vivek réponse, cela fonctionne pour les chaînes de caractères de longueur quelconque, pour remplir un tableau de longueur n:
Array(n+1).join('[string to be repeated][separator]').split('[separator]').slice(0, n)
Essayez Ceci:
J'ai besoin d'un moyen de répétition/boucle d'un tableau (avec n éléments) m fois.
Par exemple, la distribution d'une liste (des personnes) pour une semaine/mois. Disons que j'ai 3 noms, et je tiens à répéter dans une semaine: