创见博客
手写实现数组铺平
七崽爱吃小饼干2026/03/04阅读 1

1. 最通用:递归实现(支持任意层级)

javascript
function flat(arr) {
  let result = [];
  for (let item of arr) {
    // 如果是数组,递归铺平
    if (Array.isArray(item)) {
      result = result.concat(flat(item));
    } else {
      result.push(item);
    }
  }
  return result;
}

// 测试
console.log(flat([1, [2, [3, 4], 5], 6])); 
// [1,2,3,4,5,6]

2. 指定层级铺平(模拟 Array.flat(depth))

javascript
function flat(arr, depth = 1) {
  let result = [];
  for (let item of arr) {
    if (Array.isArray(item) && depth > 0) {
      // 层级减 1,递归
      result = result.concat(flat(item, depth - 1));
    } else {
      result.push(item);
    }
  }
  return result;
}

// 测试
console.log(flat([1, [2, [3, [4]]]], 2)); 
// [1,2,3,[4]]

3. 极简写法:reduce 递归

javascript
function flat(arr) {
  return arr.reduce((pre, cur) => {
    return pre.concat(Array.isArray(cur) ? flat(cur) : cur);
  }, []);
}

// 测试
console.log(flat([1, [2], [[3, 4], 5]]));
// [1,2,3,4,5]

总结

  • 递归版:最容易理解,适合面试讲解
  • 指定层级版:和原生 flat 行为一致
  • reduce 版:代码最短,优雅
评论
0/100