多维数组扁平化:flat 还是手写?看完秒懂

把多维数组拍平到指定深度,3 种写法 + 完整示例,复制即用。


一、原生 flat

[1, [2, [3, 4]]].flat(2);   // [1, 2, 3, 4]
[1, [2, [3, 4]]].flat();    // 默认深度 1 -> [1, 2, [3, 4]]

二、递归手写(任意深度)

function flatDeep(arr, depth = 1) {
  return depth > 0
    ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, depth - 1) : val), [])
    : arr.slice();
}
flatDeep([1, [2, [3, 4]]], 2); // [1, 2, 3, 4]

三、循环 + 栈(高性能)

function flatStack(arr, depth = 1) {
  const stack = arr.map(item => [item, depth]);
  const res = [];
  while (stack.length) {
    const [item, d] = stack.pop();
    if (Array.isArray(item) && d > 0) {
      stack.push(...item.map(el => [el, d - 1]));
    } else {
      res.push(item);
    }
  }
  return res.reverse();
}
flatStack([1, [2, [3, 4]]], 2); // [1, 2, 3, 4]

四、速查表

写法深度场景
.flat()固定现代浏览器
递归任意兼容旧环境
任意大数组高性能

复制即用,无需依赖!

解锁更多前端基础教程、实战技巧、避坑指南
关注主页公众号 & 博客 前端干货每天见
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赛博切图仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值