パート 1で Barmar が作成するのを手伝ってくれた関数に、さらに機能を追加しようとしています。基本的に、開始番号と終了番号から数値の範囲をカウントする多次元配列を作成しています。私にとって少し難しいのは、子範囲を前の範囲内にネストする必要があることです。これは、aInput 配列位置の最初の項目で示されます。たとえば、次の入力配列は、長さが 30 行、行ごとに 3 列の新しい配列を生成します。
var aInput = new Array();
aInput[0] = new Array("0", "1", "5");
aInput[1] = new Array("1", "1", "3");
aInput[2] = new Array("2", "1", "2");
出力は次のようになります。
0: Array[3]
1: Array[3]
2: Array[3]
3: Array[3]
4: Array[3]
5: Array[3]
6: Array[3]
7: Array[3]
0: 2
1: 1
2: 2
length: 3
8: Array[3]
9: Array[3]
10: Array[3]
11: Array[3]
12: Array[3]
13: Array[3]
14: Array[3]
15: Array[3]
16: Array[3]
17: Array[3]
18: Array[3]
19: Array[3]
20: Array[3]
21: Array[3]
22: Array[3]
23: Array[3]
24: Array[3]
25: Array[3]
26: Array[3]
27: Array[3]
28: Array[3]
29: Array[3]
length: 30
ご覧のとおり、行 7 を展開しました。その中に 3 つの項目 (列) があります。完全な配列は、入力配列の 2 行目を 1 から 3 までカウントするネストされた範囲で 1 から 5 までカウントし、その内部には 1 から 2 をカウントする別のネストされた範囲があります。シンプルなコンセプトですが、説明するのは少し難しいです。基本的に、数値グリッドを作成しています。Barmar のおかげで、これはすべて正常に動作します。新しい問題は、複数の数値グリッドを作成し、それらを積み重ねる必要があることです。つまり、入力配列は次のようになります。
aInput[0] = new Array("0", "1", "5");
aInput[1] = new Array("1", "1", "3");
aInput[2] = new Array("0", "10", "15");
aInput[3] = new Array("1", "10", "12");
結果は、長さ 42 で 2 列の配列になります。私はそれがどのように機能するべきかについての考えを持っています。セット用に別のループを追加する必要があります。これはinput_indexed配列で定義しますが、プッシュが多次元配列でどのように機能するかを理解するのにいくつか問題があります。これは私がこれまでに持っているものです。どんな助けでも大歓迎です。
// JavaScript Document
var aInput = new Array();
aInput[0] = new Array("0", "1", "5");
aInput[1] = new Array("1", "1", "3");
aInput[0] = new Array("0", "10", "12");
aInput[1] = new Array("1", "40", "41");
var input_indexed = [],
elem = [];
var rObject = {};
var set = -1;
// Get aInput[] into a more useful arrangement
for (var i = 0; i < aInput.length; i++) {
rObject = {
start: parseInt(aInput[i][1]),
end: parseInt(aInput[i][2])
};
if (parseInt(aInput[i][0]) == 0){set++;}
input_indexed[set].push(rObject);
elem.push(parseInt(aInput[i][1]));
}
aOutput = [];
done = false;
while (!done) {
aOutput.push(elem.slice(0));
for (s = 0;s < input_indexed.length;s++){ //this is where I am trying to loop through the sets
for (i = elem.length - 1;; i--) {
if (i == -1) {
done = true;
break;
}
elem[i]++;
if (elem[i] <= input_indexed[s][i].end) {
break;
}
elem[i] = input_indexed[s][i].start;
}
}
}
console.log(aOutput);