“金字塔”的字母
问题描述:
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
。
答
有趣的方式,使用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"));
答
您需要中心线后添加\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
谢谢合作 –
答
这种方式是可能的:
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
答
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>
答
使用Array#from
创建长度11的阵列为了在回调每个k与String#repeat
推a
数到阵列。加入使用\n
数组:
const result = Array.from({ length: 11 }, (v, k) => 'a'.repeat(k < 6 ? k + 1 : 11 - k)).join('\n');
console.log(result);
而你的问题是什么? –
@FelixKling“做我的作业” – xShirase
问题是'如何使代码按预期工作?' –