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?

27
demandé sur Shadow Wizard 2010-09-20 16:36:32

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:)

13
répondu Nick Craver 2017-03-02 12:55:55

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 .

37
répondu Ariya Hidayat 2013-01-31 16:52:11
for (var i=8, a=[]; i--;) a.push(1);
15
répondu Dagg Nabbit 2010-09-20 12:40:58

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]

10
répondu ktsiolis gmail com 2013-11-01 12:47:35

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)
5
répondu g.sui 2017-07-31 16:22:04

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/...

3
répondu Tom Siwik 2016-12-01 07:20:58

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
2
répondu ceving 2015-11-06 12:31:53
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
*/
0
répondu kennebec 2010-09-20 15:51:45

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"]
0
répondu IMTheNachoMan 2016-05-24 15:38:06

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;
    });
}
0
répondu prespic 2018-02-27 11:52:19