Comment générer une séquence de nombres / caractères en javascript?
Existe-t-il un moyen de générer une séquence de caractères ou de chiffres en javascript?
par exemple, je veux créer un tableau qui contient huit 1. Je peux le faire avec for loop, mais je me demande s'il y a une bibliothèque jQuery ou une fonction javascript qui peut le faire pour moi?
10 réponses
vous pouvez créer votre propre fonction réutilisable je suppose, pour votre exemple:
function makeArray(count, content) {
var result = [];
if(typeof content == "function") {
for(var i = 0; i < count; i++) {
result.push(content(i));
}
} else {
for(var i = 0; i < count; i++) {
result.push(content);
}
}
return result;
}
alors vous pourriez faire l'un de ces deux:
var myArray = makeArray(8, 1);
//or something more complex, for example:
var myArray = makeArray(8, function(i) { return i * 3; });
vous pouvez essayer ici , notez que l'exemple ci-dessus ne se base pas du tout sur jQuery donc vous pouvez l'utiliser sans. Vous ne gagnez rien de la bibliothèque pour quelque chose comme ceci:)
sans boucle, voici une solution:
Array.apply(0, Array(8)).map(function() { return 1; })
l'explication suit.
Array(8)
produit un réseau clairsemé avec 8 éléments, tous undefined
. Le tour apply
le transformera en un réseau dense. Enfin, avec map
, nous remplacons undefined
par 1
.
Utilisant Jquery:
$.map($(Array(8)),function(val, i) { return i; })
Cela renvoie:
[0, 1, 2, 3, 4, 5, 6, 7]
$.map($(Array(8)),function() { return 1; })
Cela renvoie:
[1, 1, 1, 1, 1, 1, 1, 1]
dans le cas où vous utilisez une nouvelle syntaxe Javascript, la même chose peut être réalisée en utilisant:
Array(8).fill(1)
Le suivant fonctionne très bien aussi, mais comme d'autres, le mot "nouveau" est redondant.
new Array(8).fill(1)
2016-la fonctionnalité moderne du navigateur est arrivée. Pas besoin de jquery tout le temps.
Array.from({length: 8}, (el, index) => 1);
vous pouvez remplacer la fonction Flèche par une simple fonction de rappel pour atteindre une gamme légèrement plus large de navigateurs pris en charge. C'est, pour moi au moins, la façon la plus facile d'itérer sur un tableau initialisé en une seule étape.
Note: IE n'est pas supporté dans cette solution, mais il y a un polyfill pour cela à developer.mozilla.org/...
Une séquence est un flux, qui calcule la valeur quand il est nécessaire. Cela nécessite seulement un peu de mémoire mais plus de temps CPU lorsque les valeurs sont utilisées.
un tableau est une liste de valeurs précalculées. Cela prend un certain temps avant que la première valeur puisse être utilisée. Et cela demande beaucoup de mémoire, parce que toutes les valeurs possibles de la séquence doivent être stockées dans la mémoire. Et vous devez définir une limite supérieure.
cela signifie que dans la plupart des cas, ce n'est pas une bonne idée pour créer un tableau avec les valeurs de séquence. Au lieu de cela, il est préférable d'implémenter la séquence comme une séquence réelle, qui est limitée uniquement par la longueur du mot du CPU.
function make_sequence (value, increment)
{
if (!value) value = 0;
if (!increment) increment = function (value) { return value + 1; };
return function () {
let current = value;
value = increment (value);
return current;
};
}
i = make_sequence()
i() => 0
i() => 1
i() => 2
j = make_sequence(1, function(x) { return x * 2; })
j() => 1
j() => 2
j() => 4
j() => 8
The fastest way to define an array of 8 1s is to define it-
var A= [1, 1, 1, 1, 1, 1, 1, 1];
// You'd have to need a lot of 1s to make a dedicated function worthwhile.
// Maybe in the Matrix, when you want a lot of Smiths:
Array.repeat= function(val, len){
for(var i= len, a= []; i--; ) a[i]= val;
return a;
}
var A= Array.repeat('Smith',100)
/* returned value: (String)
Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith
*/
pourquoi pas une simple jointure et split?
function seq(len, value)
{
// create an array
// join it using the value we want
// split it
return (new Array(len + 1)).join(value).split("");
}
seq(10, "a");
["a", "a", "a", "a", "a", "a", "a", "a", "a", "a"]
seq(5, 1);
["1", "1", "1", "1", "1"]
méthode typographique basée sur le code Ariya Hidayat:
/**
* Generates sequence of numbers from zero.
* @ param {number} count Count of numbers in result array.
* @ return {Array<number>} Sequence of numbers from zero to (count - 1).
*/
public static sequence(count: number): Array<number>
{
return Array.apply(0, Array(count)).map((x, i) =>
{
return i;
});
}