关于js的逻辑和算法,对于我来说一直是一个比较薄弱的板块。希望多练习能够得到提升。
下面练习输出一个菱形◇的*;
首先我们观察这个输出的结构,当总排数是5的时候,每一排的*个数为,1,3,5,3,1
我们可以先以固定的5排来写,写完之后再进行代码的扩展。
var total=5;
var len =1;
for(var i=0;i<=5;i++){
if(i<3){
len=1+i*2
}else{
len=1+(4-i)*2
}
console.log(len)
}
//1 3 5 3 1 这样我就输出了我们想要的数据格式。
//但是我们不一定只需要行数为5的,我们需求可能不固定。所以我们需要对我们得代码做一个可扩展性。
在上述代码的基础上,我们将其进行封装。
我们将需要的行数作为外界的一个传参进行修改。
function ceshi(len){
var cell=Math.ceil(len/2);
var lens=1;
for(var i =0;i<len;i++){
if(i<cell){
lens=1+2*i;
}else{
lens=1+(len-1-i)*2
}
console.log(lens);
}
}
ceshi(5);//1 3 5 3 1
ceshi (7);//1 3 5 7 5 3 1
这样我们的代码就可以随意的进行赋值了。获取到每一行的数据之后,我们就可以用*来代替了。
function ceshi(len){
var cell=Math.ceil(len/2);
var lens=1;
for(var i =0;i<=len;i++){
var contain="";
if(i<cell){
lens=1+2*i;
}else{
lens=1+(len-1-i)*2
}
var j=0;
while(j<lens){
contain+="*";
j++;
}
console.log(contain);
}
}
//经测试,可以输出具体个数的*,但是样式居中还需要调整。