JavaScript Basics 20
Recursive equivalent to nested for loops.
It is useful to dynamically create a list of array indices, for array indexing.
Non-dynamic indice list creation
var r = 4;
var c = 3; // this is signified by the number of for loops, and fixed [i,j,k]
var tot = [];
for (var i=0; i<r; i++) {
for (var j=0; j<r; j++) {
for (var k=0; k<r; k++) {
tot.push([i,j,k])
}
}
}
console.log("tot: ", tot);
Results
"tot: " Array [Array [0, 0, 0], Array [0, 0, 1], Array [0, 0, 2], Array [0, 0, 3], Array [0, 1, 0], Array [0, 1, 1], Array [0, 1, 2], Array [0, 1, 3], Array [0, 2, 0], Array [0, 2, 1], Array [0, 2, 2], Array [0, 2, 3], Array [0, 3, 0], Array [0, 3, 1], Array [0, 3, 2], Array [0, 3, 3], Array [1, 0, 0], Array [1, 0, 1], Array [1, 0, 2], Array [1, 0, 3], Array [1, 1, 0], Array [1, 1, 1], Array [1, 1, 2], Array [1, 1, 3], Array [1, 2, 0], Array [1, 2, 1], Array [1, 2, 2], Array [1, 2, 3], Array [1, 3, 0], Array [1, 3, 1], Array [1, 3, 2], Array [1, 3, 3], Array [2, 0, 0], Array [2, 0, 1], Array [2, 0, 2], Array [2, 0, 3], Array [2, 1, 0], Array [2, 1, 1], Array [2, 1, 2], Array [2, 1, 3], Array [2, 2, 0], Array [2, 2, 1], Array [2, 2, 2], Array [2, 2, 3], Array [2, 3, 0], Array [2, 3, 1], Array [2, 3, 2], Array [2, 3, 3], Array [3, 0, 0], Array [3, 0, 1], Array [3, 0, 2], Array [3, 0, 3], Array [3, 1, 0], Array [3, 1, 1], Array [3, 1, 2], Array [3, 1, 3], Array [3, 2, 0], Array [3, 2, 1], Array [3, 2, 2], Array [3, 2, 3], Array [3, 3, 0], Array [3, 3, 1], Array [3, 3, 2], Array [3, 3, 3]]
Recursive equivalent (Dynamic)
var r = 4;
var c = 3;
var tot = [];
main();
function main() {
var r_cnt = 0;
var arr = Array.from({length:r}, (v,i) => { return i; });
recur_rows(arr, r_cnt, r);
tot = tot.flat(2);
console.log("tot: ", tot);
}
function recur_rows(arr, r_cnt, r) {
var out = Array.from({length:r}, (v,rcur) => { return recur_cols(arr, r_cnt, rcur); });
tot.push(out);
if (r_cnt < r-1) {
r_cnt = r_cnt + 1;
recur_rows(arr, r_cnt, r);
}
}
function recur_cols(arr, r_cnt, rcur) {
// console.log("r_cnt: ", r_cnt);
// console.log("rcur: ", rcur);
if (c == 2) {
// For 2 columns
return [arr[r_cnt]].concat([arr[rcur]]);
} else if (c == 3) {
// For 3 columns
return arr.map((v,j) => { return [arr[r_cnt]].concat([arr[rcur]].concat([j])).flat(); });
}
}
Results
"tot: " Array [Array [0, 0, 0], Array [0, 0, 1], Array [0, 0, 2], Array [0, 0, 3], Array [0, 1, 0], Array [0, 1, 1], Array [0, 1, 2], Array [0, 1, 3], Array [0, 2, 0], Array [0, 2, 1], Array [0, 2, 2], Array [0, 2, 3], Array [0, 3, 0], Array [0, 3, 1], Array [0, 3, 2], Array [0, 3, 3], Array [1, 0, 0], Array [1, 0, 1], Array [1, 0, 2], Array [1, 0, 3], Array [1, 1, 0], Array [1, 1, 1], Array [1, 1, 2], Array [1, 1, 3], Array [1, 2, 0], Array [1, 2, 1], Array [1, 2, 2], Array [1, 2, 3], Array [1, 3, 0], Array [1, 3, 1], Array [1, 3, 2], Array [1, 3, 3], Array [2, 0, 0], Array [2, 0, 1], Array [2, 0, 2], Array [2, 0, 3], Array [2, 1, 0], Array [2, 1, 1], Array [2, 1, 2], Array [2, 1, 3], Array [2, 2, 0], Array [2, 2, 1], Array [2, 2, 2], Array [2, 2, 3], Array [2, 3, 0], Array [2, 3, 1], Array [2, 3, 2], Array [2, 3, 3], Array [3, 0, 0], Array [3, 0, 1], Array [3, 0, 2], Array [3, 0, 3], Array [3, 1, 0], Array [3, 1, 1], Array [3, 1, 2], Array [3, 1, 3], Array [3, 2, 0], Array [3, 2, 1], Array [3, 2, 2], Array [3, 2, 3], Array [3, 3, 0], Array [3, 3, 1], Array [3, 3, 2], Array [3, 3, 3]]
Get Practicing DatScy’s stories in your inbox
Join Medium for free to get updates from this writer.
Good Luck and Happy Practicing! 👋
💻 GitHub | 🔔 Subscribe to Practicing Datscy @ Medium | 🌷 Practicing Datscy @ Dev.to






