私はこのアルゴリズムで私の髪を引っ張っています。目的は、数値配列を入力として受け取り、すべての連続した数値を範囲として表示する文字列を出力することです。例えば、私の入力が[1,2,4,6,7,8]の場合、私の出力は "1-2,4,6-8"でなければなりません。私の問題は、ネストされたforループのif文での変数代入にあります。 IndexEnは、jが増分するたびにオーバーライドされ、最終的に内側ループを最高値として終了する必要があります。問題は、forループの外で変数を呼び出そうとすると、最大値ではなくIndexEnの各値が渡されることです。私はIndexEnがインナーループのスコープの外側にあり、インナーループがまだ実行されている間にどのようにできるか分かりません。誰かが私がここで起こっていることを修正し理解するのを助けてくれますか?入れ子にされたforループのJavascript変数の割り当て
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));