Вот решение ES6 без явной итерации. Он не особенно краток и, вероятно, не слишком полезен в данном случае, но забавен (IMHO), поэтому я хотел поделиться им.
Он использует Array.from
для применения функции генератора, дающей следующий символ (*
или =
) для каждой ячейки и объединяет ячейки с пробелами и строками с символами новой строки.
// Utility to apply function <fn> <n> times.
function times(n, fn) {
return Array.from({ length: n }, fn);
}
// Generator function yielding the next symbol to be drawn.
//
function cetakGambar(angka) {
let generator = (function*() {
let [i, s1, s2] = [0, "*", "="];
while (true) {
// Make sure to start a new line with a different symbol for
// even rows in case <angka> is even
if (i++ % angka === 0 && angka % 2 === 0) {
[s1, s2] = [s2, s1];
}
// limit the generator to the number of values we actually need
if (i === angka * angka + 1) return;
yield i % 2 === 0 ? s1 : s2;
}
})();
return times(
angka,
() => times(angka, () => generator.next().value).join(" ") // join symbols w/ spaces ...
).join("\n"); // ... and lines w/ newline
}
console.log(cetakGambar(5));
Кодовый блок здесь: https://codesandbox.io/s/wispy-http-mfxgo?file= / src / index. js