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]
相关推荐
Zuckjet_1 小时前
开启 3D 之旅 - 你的第一个 WebGL 三角形
前端·javascript·3d·webgl
sz-lcw1 小时前
MySQL知识笔记
笔记·mysql·adb
2401_863801461 小时前
探索 12 种 3D 文件格式:综合指南
前端·3d
机器学习之心1 小时前
多目标鲸鱼优化算法(NSWOA),含46种测试函数和9个评价指标,MATLAB实现
算法·matlab·多目标鲸鱼优化算法·46种测试函数·9个评价指标
西阳未落2 小时前
C++基础(21)——内存管理
开发语言·c++·面试
古译汉书2 小时前
嵌入式铁头山羊STM32-各章节详细笔记-查阅传送门
数据结构·笔记·stm32·单片机·嵌入式硬件·个人开发
我的xiaodoujiao2 小时前
Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium
开发语言·python·测试工具
max5006002 小时前
基于Meta Llama的二语习得学习者行为预测计算模型
人工智能·算法·机器学习·分类·数据挖掘·llama
callJJ2 小时前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di
珍宝商店3 小时前
前端老旧项目全面性能优化指南与面试攻略
前端·面试·性能优化