所以我试着编写一个函数模式,创建最多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;
}
答案 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');
}
首先我们定义静态Method Array.range,它可以帮助我们在javascript中定义数字范围。
模式功能现在可以使用此范围来创建所需的数字。 函数的第一行创建一个范围从1..n(行的起始数字)。
第二行遍历此数组并将每个值1..n转换为从亚麻数到n的范围。使用.join(),您可以组合每一行的字符并组合这些行。
更新2
这里有一个更新的小提琴,没有逗号分隔的数字(在闭包内使用连接):http://jsfiddle.net/afmchdwp/1/