2017-08-12 2 views
1

Hallo, ich habe folgend mit array.map:mit Wiederholung in Javascript

var a = [1, 2, 3] 

Ich würde wieder in dieses Array aktualisieren mag:

a = [11,22,33] 

ich so etwas wie

zu tun versuchen,
a.map(repeat(2)); 

aber es führt zu einem Fehler.

Ich weiß, ich könnte leicht durch diese Schleife, aber ich versuche, die Verwendung von präziseren Code zu üben, und erweitern Sie mein Wissen ein wenig über verschiedene Funktionen und wie man sie verwendet.

Ist so etwas möglich?

+0

Sie benötigen die Objekte als Strings oder Zahlen? –

+1

'let x = 2; a.map (e => e * ((1 << x) - 1) .zuString (2)); 'wiederhole so oft du willst. – ASDFGerte

+0

Ich brauche die Objekte eigentlich als Strings. Ich werde versuchen, zu String auf ihnen zu laufen, um zu sehen, dass es funktioniert. – rycankun

Antwort

1

Sie könnten die Zahl in eine Zeichenfolge umwandeln, den Wert wiederholen und zurück in Zahl konvertieren.

var a = [1, 2, 3] 
 
a = a.map(a => +a.toString().repeat(2)); 
 

 
console.log(a);

1

Vorausgesetzt, dass Sie nach der Wiederholung der Ziffern suchen, verwenden Sie Strings dafür. Die eine handliche repeat method für diesen Zweck:

a.map(x => Number(String(x).repeat(2)))); 

Wenn Sie Ihre Schreibweise verwenden möchten, müssen Sie eine höhere Ordnung repeat Funktion machen, die eine andere Funktion verwendet werden, kehrt als map Rückruf:

function repeat(times) { 
    return x => String(x).repeat(times); 
} 
a.map(repeat(2)).map(Number) 
1

Ja, das ist möglich. Sie können als eine Funktion definieren repeat, die eine Funktion zurückgibt:

function repeat(times) { 
 
    return function (value) { 
 
     return +String(value).repeat(times); 
 
    } 
 
} 
 

 
// Your code: 
 
var a = [1, 2, 3]; 
 
var result = a.map(repeat(2)); 
 
console.log(result);

Die map Methode eine Funktion als Argument erwartet, so der Aufruf von repeat(2) sollte eine Funktion zurück. Diese (innere) Funktion verwendet String#repeat nach dem Konvertieren des Werts in Zeichenfolge und konvertiert das Ergebnis dann zurück in Nummer mit der unary +.

0

Hier gehen Sie, number Version und string Version

const doubleIt = n => Number(`${n}${n}`); 
 

 
const arr = [1, 2, 3, 55]; 
 
const strArr = arr.map(o => `${o}${o}`); 
 
const numArr = arr.map(o => o * 11); 
 
const numFromStringsArr = arr.map(o => doubleIt(o)); 
 

 
console.log(strArr); 
 
console.log(numArr); 
 
console.log(numFromStringsArr);

0

Sie können ein Array von N .length mit Array() erstellen, Array.prototype.fill() verwenden, um die erstellte Array mit aktuellem Elemente .map() Rückruf, Kette Array.prototype.join() mit "" als Parameter zu füllen, verwenden + Operator Zeichenfolge konvertieren numerieren

var a = [1, 2, 3], n = 2; 
 
a = a.map(el => +Array(n).fill(el).join("")); 
 
console.log(a);

+0

Beachten Sie, dass 'fill' in keiner IE-Version unterstützt wird. – Andy

+0

@Andy Habe das nicht schon mal benutzt. Es gibt mehrere Polyfills für 'Array.prototype.fill', die als ein Gist verfügbar sind oder bei github – guest271314

+0

Ich auch nicht, aber ich arbeitete an einer ähnlichen Antwort wie Sie und überprüfte die MDN Kompatibilitätstabelle dafür. Ich dachte, es war erwähnenswert. – Andy