2016-12-10 6 views
0

Ich habe eine Zahl, die durch 4 teilbar ist, z. 20. Jetzt muss ich einen String erstellen, die wie folgt aussieht:Wie kann man diese Saite effizient aufbauen?

(1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12), (13, 14, 15, 16), (17, 18, 19, 20) 

alle Zahlen von 1 bis 20, in Packungen mit 4, eingewickelt in Klammern, und alles durch Komma getrennt gruppiert also.

Mein aktueller Ansatz sieht wie folgt aus:

const placeholders = []; 

for (let i = 0; i < events.length; i++) { 
    const base = i * 4 + 1; 

    placeholders.push(`(${base}, ${base + 1}, ${base + 2}, ${base + 3})`); 
} 

const result = placeholders.join(','); 

Gibt es eine Möglichkeit, dies a) effizienter zu machen, und b) in einem besser lesbaren Art und Weise?

+4

IMHO gehört dies auf http://codereview.stackexchange.com/. – Sirko

Antwort

3
var results = []; 
for(var i = 1; i <= events.length * 4; i++){ 
    var m = i % 4; 
    results.push((m==1 ? "(" : "") + i + (m==0 ? ")" : "")); 
} 
results = results.join(", "); 

Besser lesbar? Wahrscheinlich nicht. Effizienter? Sie laufen ungefähr gleich.

Der beste Weg zum Mitnehmen ist wahrscheinlich, dass Sie Ihre Schleife so ändern können, dass sie bei 1 beginnt.

+0

+1 für die kluge Art, die '(' und ')' Verkettung mit den ternären Operatoren herauszufinden. Ich habe meine Antwort gelöscht, weil deine besser ist. Aber es wäre cool, wenn Sie "4" als Argument für eine Funktion nehmen würde, die diese Zeichenfolge erzeugt - ich weiß, dass das keine Voraussetzung für die OP-Frage ist :) –

+0

Auch, warum nicht an dieser einen gehen: http: //stackoverflow.com/questions/41075559/how-to-efficiently-build-this-array;) –

+0

@RobinMackenzie Ich wäre mit [dieser Strategie] gegangen (http://stackoverflow.com/a/41075610/367865) Aber diese Antwort hat einen besseren Job gemacht als ich. – Ouroborus

0

Einfach versucht. Ich weiß nicht effizient oder nicht.

res = '('; 
for (i = 1; i <= 20; i++) { 
    var mod = i % 4; 
    (mod == 1 && i != 1) ? res += ',(' : ''; 
    res += i; 
    res += (mod != 0) ? ',' : ')'; 
} 
Verwandte Themen