试图理解这个功能模式

时间:2015-09-11 22:01:44

标签: javascript

所以我试着编写一个函数模式,创建最多n行的以下模式。如果参数为0或负整数,那么它应返回""即空字符串。

123456
23456
3456
456
56
6

我试图理解这个问题的解决方案如下:

function pattern(n){  
 var output="";   
   for(i=1;i<n+1;i++){ 
     for(j=i;j<n+1;j++){    //what is the purpose of this j loop? 
       output += j;   
     }
     if(i!=n) output +="\n";   //I know \n can jump to next line,  but what does this if statement mean?  why I!=n? 
   }
 return output;
}

1 个答案:

答案 0 :(得分:2)

// function definition
function pattern(n){  
 // declare a variable to collect the lines
 var output="";
   // there are n lines
   for(i=1;i<n+1;i++){ 
     // each line starts with the linenumber and ends with n
     // so take a loop from i to n
     for(j=i;j<n+1;j++){
       // collect the numbers of each line as a string in the declared variable 
       output += j;   
     }
     // if i!=n means: not the last line
     if(i!=n) output +="\n";
   }
 // return the result of this function
 return output;
}

<强>更新

但请允许我指出,给定的解决方案不是很聪明。看看下面的代码:

Array.range = function(start, end) {
    return Array.apply(null, Array(end+1)).map(function (_, i) {return i;}).slice(start);
}

function pattern(n){
    var startValues = Array.range(1,n);
    return startValues.map(function(i) { return Array.range(i,n); }).join('\n');
}

http://jsfiddle.net/afmchdwp/

首先我们定义静态Method Array.range,它可以帮助我们在javascript中定义数字范围。

模式功能现在可以使用此范围来创建所需的数字。 函数的第一行创建一个范围从1..n(行的起始数字)。

第二行遍历此数组并将每个值1..n转换为从亚麻数到n的范围。使用.join(),您可以组合每一行的字符并组合这些行。

更新2

这里有一个更新的小提琴,没​​有逗号分隔的数字(在闭包内使用连接):http://jsfiddle.net/afmchdwp/1/