Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Làm phẳng mảng nhiều cấp lồng nhau không dùng đệ quy trong JavaScript

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 ]