在JavaScript中打印具有给定长度的菱形的代码
因此,我目前正在学习JavaScript,我对在编程中实现某些功能的多种不同方式感兴趣。这是我的菱形代码,它适用于给定的奇数:在JavaScript中打印具有给定长度的菱形的代码,javascript,iteration,Javascript,Iteration,因此,我目前正在学习JavaScript,我对在编程中实现某些功能的多种不同方式感兴趣。这是我的菱形代码,它适用于给定的奇数: const l = 11; let space = ' '; let star = '*'; let i = 1; let k; let n = 0; while(i <= l) { k = (l - i)/2; console.log(space.repeat(k) + star.repeat(i)); i = i + 2; } // i =
const l = 11;
let space = ' ';
let star = '*';
let i = 1;
let k;
let n = 0;
while(i <= l) {
k = (l - i)/2;
console.log(space.repeat(k) + star.repeat(i));
i = i + 2;
}
// i = i - 2;
while(i >= 2) {
i = i - 2;
k = (l - i)/2;
if(i < l) { // To get rid of repeating middle line
console.log(space.repeat(k) + star.repeat(i));
} else {
continue;
}
}
const l=11;
让空间=“”;
设星='*';
设i=1;
让k;
设n=0;
而(i=2){
i=i-2;
k=(l-i)/2;
if(i
还有其他更直观的方法吗?您可以采用递归方法调用函数,直到得到最长的星线
函数菱形(l,i=1){
常数
星=“*”,
空格=“”,
行=空格。重复((l-i)/2)+星。重复(i);
控制台日志(行);
如果(i>=l)返回;
菱形(l,i+2);
控制台日志(行);
}
钻石(11)代码>
.as控制台包装{最大高度:100%!重要;顶部:0;}
迭代方法
如果您想使用迭代方法来解决此问题,可以执行以下操作:
const makeDiamond=n=>{
设总=n,iter=0
const base=['*'.重复(n)]//从中间开始,向外构建
而((n-=2)>0){
常数层=''。重复(++iter)+'*'。重复(n)
base.unshift(层)//前置层
base.push(层)//附加层
}
base.forEach(l=>console.log(l))//按顺序打印每个层
}
我实际上设法创建了另一个类似的代码,使I=I+2继续运行,而不是在第二个循环中减少它
const l = 11;
let space = ' ';
let star = '*';
let i = 1;
let k;
let n = 0;
while(i <= l) {
k = (l - i)/2;
console.log(space.repeat(k) + star.repeat(i));
i = i + 2;
}
while(i >= l) {
k = (i - l)/2;
n = i - (4 * k);
if (n > 0) {console.log(space.repeat(k) + star.repeat(n));
} else { break; }
i = i + 2;
}
const l=11;
让空间=“”;
设星='*';
设i=1;
让k;
设n=0;
while(i=l){
k=(i-l)/2;
n=i-(4*k);
如果(n>0){console.log(space.repeat(k)+star.repeat(n));
}else{break;}
i=i+2;
}
创建一个函数以生成第n行。
通过创建一个等于高度一半的数组来创建顶部,并使用line函数对其进行映射。
连接顶部,然后反转顶部并将其用作底部
const diamond=n=>(n=Array(~(n/2)).fill().map((v,i)=>“”。repeat((n-i*2+1)/2)+“*”。repeat(i*2+1))。join(“\n”)+“\n”+n.reverse().slice(1)。join(“\n”);
console.log(菱形(10))
带reduce
:
const n=11;
数组.from(数组(~-n/2 | 0),((u,i)=>“”。重复(i+1)+“*”。重复(n+~i*2))
.reduce((a,c)=>[c,…a,c],“*”。重复(n)])
.forEach(l=>console.log(l))