JS实现数组扁平化

  1. ES6 的 Array.prototype.flat()

具体说明:

  • 默认情况下,flat() 会将数组扁平化 一层 嵌套。
  • 可以传一个参数 depth,表示扁平化的深度,默认是 1。

举例:

javascript 复制代码
const arr = [1, 2, [3, 4]];
console.log(arr.flat());  // 输出: [1, 2, 3, 4]

const arr2 = [1, 2, [3, 4, [5, 6]]];
console.log(arr2.flat());       // 默认一层扁平化,输出: [1, 2, 3, 4, [5, 6]]
console.log(arr2.flat(2));      // 扁平化两层,输出: [1, 2, 3, 4, 5, 6]

如果想完全展开所有层,可以用 Infinity 作为参数:

javascript 复制代码
console.log(arr2.flat(Infinity));  // 展开所有嵌套层
  1. ES6 之前的写法(递归实现)
javascript 复制代码
function flatten(arr) {
  let result = [];
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      // 递归展开
      result = result.concat(flatten(arr[i]));
    } else {
      result.push(arr[i]);
    }
  }
  return result;
}

// 测试
const arr = [1, [2, [3, 4], 5], 6];
console.log(flatten(arr)); // [1, 2, 3, 4, 5, 6]
  1. ES6 及之后的写法(用 reduce 和扩展运算符)
javascript 复制代码
const flatten = (arr) => 
  arr.reduce((acc, val) => 
    acc.concat(Array.isArray(val) ? flatten(val) : val), 
  []);

// 测试
const arr = [1, [2, [3, 4], 5], 6];
console.log(flatten(arr)); // [1, 2, 3, 4, 5, 6]
相关推荐
小王师傅661 分钟前
【Java结构化梳理】泛型-初步了解-下
java·开发语言
一叶飘零晋5 分钟前
【(一)Electron 使用之如何用vite+vue3搭建初始框架】
前端·javascript·electron
新新学长搞科研6 分钟前
【高质量能源会议推荐】第十一届能源与环境研究进展国际学术会议(ICAEER 2026)
人工智能·物联网·算法·机器学习·能源·环境·新能源
光影少年16 分钟前
前端SSR和ssg区别
前端·vue.js·人工智能·学习·react.js
CN-Dust17 分钟前
【C++】for循环例题专题
java·c++·算法
SmartRadio17 分钟前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信 (采用Arduino代码框架)
开发语言·智能手机·esp32·长距离wifi
广州华水科技20 分钟前
北斗形变监测传感器在水库安全监测中的应用与发展
前端
其实防守也摸鱼22 分钟前
带你了解与配置phpmyadmin
笔记·安全·网络安全·pdf·编辑器·工具·调试
njsgcs27 分钟前
solidworks自动标注折弯4 无向图 c#
开发语言·c#·solidworks