สมมติเรามี nested array ของตัวเลขแบบนี้:
const arr = [1, 4, 5, [
5, 6, [
6, 19, 5, [5]
], [5, 7, 6, [6, 8]], 8 ], 6];
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับ nested array เข้ามา (ซ้อนได้ลึกเท่าไหร่ก็ได้) ฟังก์ชันควรคืนอาร์เรย์ใหม่ที่เป็น flattened version ของอินพุต
มีเงื่อนไขสองข้อที่ต้องหลีกเลี่ยง:
- ห้ามใช้ custom recursive function ใดๆ ในโค้ด
- ห้ามใช้ Array.prototype.flat() method
ตัวอย่างโค้ด
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));
ผลลัพธ์
ผลลัพธ์ที่แสดงในคอนโซลจะเป็นดังนี้:
[ 1, 4, 5, 5, 6, 6, 19, 5, 5, 5, 7, 6, 6, 8, 8, 6 ]