Cho mảng lồng nhau tùy ý:
const arr = [1, 4, 5, [5, 6, [6, 19, 5, [5]], [5, 7, 6, [6, 8]], 8], 6];
Viết hàm làm phẳng (flatten) không dùng đệ quy tùy chỉnh và không dùng Array.prototype.flat().
Ví dụ
const arr = [1, 4, 5, [5, 6, [6, 19, 5, [5]], [5, 7, 6, [6, 8]], 8], 6];
const flattenWithoutRecursion = (arr = []) => {
const res = [];
let level = 0, ref = [arr], counter = [0];
while(level >= 0){
if (counter[level] >= ref[level].length) {
level--;
continue;
};
if (Array.isArray(ref[level][counter[level]])) {
ref[level + 1] = ref[level][counter[level]];
counter[level]++;
level++;
counter[level] = 0;
continue;
};
res.push(ref[level][counter[level]]);
counter[level]++;
};
return res;
};
console.log(flattenWithoutRecursion(arr));Kết quả
Kết quả in ra console:
[ 1, 4, 5, 5, 6, 6, 19, 5, 5, 5, 7, 6, 6, 8, 8, 6 ]