Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中打印具有给定长度的菱形的代码_Javascript_Iteration - Fatal编程技术网

在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 =

因此,我目前正在学习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 = 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))