【发布时间】:2016-09-13 16:56:49
【问题描述】:
我正在用这个算法拉扯我的头发。目标是将数字数组作为输入并输出一个字符串,该字符串将所有连续数字显示为一个范围。例如,如果我的输入是 [1,2,4,6,7,8,] 我的输出应该是“1-2,4,6-8”。我的问题在于嵌套 for 循环的 if 语句中的变量赋值。每次 j 增加时,IndexEn 都会被覆盖,并且最终应该作为最高值退出内部循环。问题是,当我尝试在 for 循环之外调用变量时,它会传递 IndexEn 的每个值而不是最大值。我不明白 IndexEn 在内部循环仍在运行时如何能够超出内部循环的范围?有人可以帮我解决并了解这里发生的事情吗?
function bkInd(arr){
var bookSt="";
var indexSt;
var indexEn;
for(var i =0;i<arr.length-1;i++){
if(arr[i+1] !== (arr[i]+1)) {
if(i===0 || (i>0 && arr[i]) !== (arr[i-1]+1) ){
bookSt+= arr[i]+",";
}
// check to see if number are sequential and SHOULD output starting index value - last value
}else{
for(var j=i+1;j<arr.length;j++){
var count=0;
if(arr[j]==(arr[i +count]+1)){
indexSt = arr[i];
indexEn = arr[j];
count+=1;
}
}
//concatenate string
//console.log(indexEn); for value of index
bookSt+= indexSt+"-"+indexEn+",";
}
}
return bookSt;
}
var bookList = [1,3,4,5,7,9,10,11];
document.write(bkInd(bookList));
【问题讨论】:
标签: javascript for-loop scope