639 Stimmen

Ein Array erstellen, in dem dasselbe Element mehrmals wiederholt wird

In Python, wo [2] eine Liste ist, ergibt der folgende Code diese Ausgabe:

[2] * 5 # Outputs: [2,2,2,2,2]

Gibt es eine einfache Möglichkeit, dies mit einem Array in JavaScript zu tun?

Ich habe dazu die folgende Funktion geschrieben, aber gibt es etwas Kürzeres oder Besseres?

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;
};

1277voto

Niko Ruotsalainen Punkte 41658

In ES6 mit Array füllen() Methode

console.log(
  Array(5).fill(2)
)
//=> [2, 2, 2, 2, 2]

185voto

Janus Troelsen Punkte 19028
>>> Array.apply(null, Array(10)).map(function(){return 5})
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
>>> //Or in ES6
>>> [...Array(10)].map((_, i) => 5)
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

133voto

Vivek Punkte 4556

Können Sie versuchen:

Array(6).join('a').split(''); // returns ['a','a','a','a','a'] (5 times)

Update (06.01.2018) :

Jetzt können Sie eine Reihe von Zeichen wiederholen lassen.

new Array(5).fill('a'); // give the same result as above;
// or
Array.from({ length: 5 }).fill('a')

Hinweis: Weitere Informationen über füllen(...) y von(...) für Kompatibilität und Browserunterstützung.

Update (05/11/2019) :

Eine andere Möglichkeit, ohne Verwendung von fill o from die für Zeichenfolgen beliebiger Länge funktioniert:

Array.apply(null, Array(3)).map(_ => 'abc') // ['abc', 'abc', 'abc']

Gleich wie oben Antwort . Der Vollständigkeit halber sei hinzugefügt.

122voto

Felipe Chernicharo Punkte 1812

...und Array.fill() kommt zur Rettung!

Bevor ich das hier kannte, habe ich alles manuell geschrieben.

Array(5).fill('')  // =>  ['','','','','']

Array(4).fill(0)  // =>  [0, 0, 0, 0]

Sie können auch einfach ein sequenzielles Array mit fill() + map() erstellen

Array(4).fill('').map((_, i) => i + ' ') // =>  ['0 ','1 ','2 ','3 ']

Array(3).fill(' ').map((flower, i) => i + flower) // =>  ['0 ','1 ','2 ']

Seien Sie vorsichtig, wenn Sie Objekte und Arrays mit .fill() erstellen, denn sie sind referenzierte Typen

Das bedeutet, dass Javascript alle erstellten Objekte als ein und dasselbe Objekt betrachtet (was zu unerwarteten Fehlern führen kann, falls Sie weiter mit den erstellten Objekten interagieren möchten)

//  Careful when using .fill() with objects and arrays:

Array(3).fill({ value: 2 })  // =>  [{ value: 2 },{ value: 2 },{ value: 2 }]

Die obige Zeile funktioniert, aber es wäre viel sicherer, sich an das Muster .fill().map() zu halten. Etwa so:

//  Much better!

Array(3).fill().map(item => ({ value: 2 }))

72voto

Guffa Punkte 663241

Sie können das so machen:

function fillArray(value, len) {
  if (len == 0) return [];
  var a = [value];
  while (a.length * 2 <= len) a = a.concat(a);
  if (a.length < len) a = a.concat(a.slice(0, len - a.length));
  return a;
}

Bei jeder Iteration wird das Array verdoppelt, so dass mit wenigen Iterationen ein sehr großes Array erstellt werden kann.


Hinweis: Sie können Ihre Funktion auch erheblich verbessern, indem Sie push anstelle von concat als concat wird bei jeder Iteration ein neues Array erstellt. Etwa so (nur als Beispiel dafür, wie Sie mit Arrays arbeiten können):

function fillArray(value, len) {
  var arr = [];
  for (var i = 0; i < len; i++) {
    arr.push(value);
  }
  return arr;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X