2016-12-03 220 views
0

「金字塔」的字母

var z = []; 
 
for(var i = 1; i < 7; i++) z.push("a".repeat(i)); 
 
console.log(z.join("\n")+"\n"+"a".repeat(7)+z.reverse().splice(0,1).join("\n"));

我做了,做了的字母「金字塔」的代碼,這應該是這樣的:

a 
aa 
aaa 
aaaa 
aaaaa 
aaaaaa 
aaaaaaa 
aaaaaa 
aaaaa 
aaaa 
aaa 
aa 
a 

,但它給人的這樣的輸出:

a 
aa 
aaa 
aaaa 
aaaaa 
aaaaaa 
aaaaaaaaaaaaa 

代碼在這裏:

var z = []; 
for(var i = 1; i < 7; i++) z.push("a".repeat(i)); 
console.log(z.join("\n")+"\n"+"a".repeat(7)+z.reverse().splice(0,1).join("\n")); 

如何使代碼按預期方式工作?

P.S.我不需要單獨輸出,因爲我不使用console.log方法,而是使用API​​方法message.send

+1

而你的問題是什麼? –

+0

@FelixKling「做我的作業」 – xShirase

+0

問題是'如何使代碼按預期工作?' –

回答

1

有趣的方式,使用modulos,與任何尺寸可用。

var len = 7; 
 
var z = []; 
 
for(var i = 0; i < 2*len; i++) 
 
    if(i<len) 
 
    z.push("a".repeat(i%len+1)); 
 
    else if (i>len) 
 
    z.push("a".repeat(len-i%len)) 
 
console.log(z.join("\n"));

1

您需要中心線後添加\n,你需要刪除的拼接。

var z = []; 
 
for(var i = 1; i < 7; i++) z.push("a".repeat(i)); 
 
console.log(
 
    z.join("\n")+"\n"+ 
 
    "a".repeat(7)+'\n'+ 
 
    z.reverse().join("\n") 
 
);

+0

謝謝合作 –

0

這種方式是可能的:

var z = []; 
for(var i = 1; i < 7; i++) z.push("a".repeat(i)); 
for(var i = 7; i > 0; i--) z.push("a".repeat(i)); 
console.log(z.join("\n")); 

或:

var z = []; 
for(var i = -7; i < 7; i++) z.push("a".repeat(7-Math.abs(i))); 
console.log(z.join("\n")); 

也嘗試這種非常快速的實現:

console.log('a\naa\naaa\naaaa\naaaaa\naaaaaa\naaaaaaa\naaaaaa\naaaaa\naaaa\naaa\naa\na'); 
+0

恭喜,你贏了:) https://jsperf.com/pyramid-of-letters – xShirase

0

const fn = (ch, len) => { 
 
    let head = footer = ''; 
 
    Array(...Array(len).keys()).forEach((e, i) => { 
 
    head += ch.repeat(i + 1) + `\n`; 
 
    if(i !== 0) 
 
     footer += ch.repeat(len - i) + `\n`; 
 
    }); 
 
    return head + footer; 
 
}; 
 

 
document.querySelector('pre').innerHTML = fn('a', 7);
<pre></pre>

0

使用Array#from創建長度11的陣列爲了在回調每個k與String#repeata數到陣列。加入使用\n數組:

const result = Array.from({ length: 11 }, (v, k) => 'a'.repeat(k < 6 ? k + 1 : 11 - k)).join('\n'); 
 

 
console.log(result);