数组扁平化(flatten)实现方案

2023-11-13

[1,2,3,[1,2,3,[1,2]]] => [1, 2, 3, 1, 2, 3, 1, 2]

上面的转换就是数组的扁平化,将一个嵌套多层的数组 array 转换为只有一层的数组。 下面是实现数组扁平化的几种简单方法。

1. 递归

function flatten1(arr){
    let result = [];
    for(var i =0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
            result = result.concat(flatten1(arr[i]));
        }else{
            result.push(arr[i]);
        }
    }
    return result;
}


flatten1([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

2. toString

function flatten2(arr){
   arr = arr.join(',').split(',');
   arr = arr.map(item=>+item); //将被转成字符串的数字转换回去;
   return arr;
}

flatten2([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

3. reduce()

function flatten3(arr){
    return arr.reduce((prev,next)=>{
        return prev.concat(Array.isArray(next)? flatten3(next) : next);
    },[])
}

flatten3([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

4. concat()

function flatten4(arr) {
    return !Array.isArray(arr) ? arr : [].concat.apply([], arr.map(flatten4));
}


flatten4([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

5. arr.flat()

//arr.flat()   会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
 //Infinity 无穷大, -Infinity无穷小
function flatten5(arr){
    return  arr.flat(Infinity);
}

flatten5([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]

6. JSON

function flatten6(arr){
    let str = JSON.stringify(arr);
    let str1 = str.replace(/\[|\]/g,'');
    let arr1 = str1.split(',');
    return arr1.map(item=>+item);//将被转成字符串的数字转换回去;
}

flatten6([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组扁平化(flatten)实现方案 的相关文章

  • 华为OD机试真题-分配土地-Python-OD统一考试(C卷)

    题目描述 从前有个村庄 村民们喜欢在各种田地上插上小旗子 旗子上标识了各种不同的数字 某天集体村民决定将覆盖相同数字的最小矩阵形的土地的分配给为村里做出巨大贡献的村民 请问 此次分配土地 做出贡献的村民中最大会分配多大面积 输入描述 第一行
  • 基于java的饮食分享平台系统设计与实现

    基于java的饮食分享平台系统设计与实现 I 引言 A 研究背景和动机 近年来 随着人们生活水平的提高和健康意识的增强 饮食健康已经成为越来越多人的关注焦点 因此 一个方便快捷的饮食分享平台就显得尤为重要 基于Java的饮食分享平台系统设计
  • HTML概述、基本语法(表格整理、标签、基本结构)

    一 HTML概述 HTML指的是超文本标记语言 超文本 是指页面内可以包含图片 链接 声音 视频等内容 标记 标签 通过标记符号来告诉浏览器页面该如何显示 我们可以打开浏览器 右击页面 点击 查看网页源代码 来方便了解HTML标签通过浏览器
  • ​LeetCode解法汇总82. 删除排序链表中的重复元素 II

    目录链接 力扣编程题 解法汇总 分享 记录 CSDN博客 GitHub同步刷题项目 https github com September26 java algorithms 原题链接 力扣 LeetCode 描述 给定一个已排序的链表的头
  • Vue3 和Vue2的区别,以及钩子函数的使用

    Vue js 3 和 Vue js 2 是两个主要版本的流行前端框架 它们之间有很多区别 包括性能优化 新特性和改进的API等 以下是一些Vue 3与Vue 2之间的主要区别 以及一些示例代码来说明这些差异 1 性能优化 响应式系统 Vue
  • 低代码配置-列表页组件设计

    保存 表单属性存放 bill 筛选项配置存放 filterLayout 列表按钮存放 buttonLayout 列表布局存放 listLayout api存放 api 数据结构 layout 存放表单基础配置 bill 存放按钮基础配置 b
  • 机器学习算法实战案例:时间序列数据最全的预处理方法总结

    文章目录 1 缺失值处理 1 1 统计缺失值 1 2 删除缺失值 1 3 指定值填充 1 4 均值 中位数 众数填充
  • HarmonyOS 基于eTS高效开发HarmonyOS课程类应用

    随着HarmonyOS 3 0 Beta版的发布 API Version 8新增了大批JS eTS API接口 相信很多开发者已经迫不及待想体验基于eTS的HamronyOS应用开发 本期Codelab 我们将基于API Version 8
  • 机器学习算法实战案例:LSTM实现多变量多步负荷预测

    文章目录 1 数据处理 1 1 数据集简介 1 2 数据集处理 2 模型训练与预测 2
  • 【牛客周赛Round 27】题目讲解

    题目一 小红的二进制删数字 小红拿到了一个二进制字符串 s 她可以删掉其中的一些字符 使得最终该字符串为一个2的幂 即可以表示为 2 k 形式的数 小红想知道 自己最少删几个字符可以达成 请你编写一个函数返回这个答案 具体思路 看到这道题目
  • 史上最全Java面试八股文(带全部答案)2024年最新版

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 2024史上最全Java面试八股文(带全部答案)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 面试官:分库分表后如何生成全局ID?

    分库分表后就不能使用自增 ID 来作为表的主键了 因为数据库自增 ID 只适用于单机环境 但如果是分布式环境 是将数据库进行分库 分表或数据库分片等操作时 那么数据库自增 ID 就会生成重复 ID 从而导致业务查询上的问题 所以此时 可以使
  • 【自适应滤波】一种接近最佳的自适应滤波器,用于突发系统变化研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • 考虑光伏出力利用率的电动汽车充电站能量调度策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 每天10个前端小知识 <Day 14>

    前端面试基础知识题 1 CSSOM树和DOM树是同时解析的吗 浏览器会下载HTML解析页面生成DOM树 遇到CSS标签就开始解析CSS 这个过程不会阻塞 但是如果遇到了JS脚本 此时假如CSSOM还没有构建完 需要等待CSSOM构建完 再去
  • 2024最强Java面试八股文合集(持续更新)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 最大流-Dinic算法,原理详解,四大优化,详细代码

    文章目录 零 前言 一 概念回顾 可略过 1 1流网络 1 2流 1 3最大流 1 4残留网络 1 5增广路
  • 深入解析 YAML 配置文件:从语法到最佳实践

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结

随机推荐

  • 一个自动生成卡通头像的工具网站

    1 打开网站 https deepai org machine learning model toonify 2 选择照片 3 上传照片 4 结果
  • flutter 获取屏幕宽度工具类

    import dart ui 工具类 class GlobalUtils static num screenW 0 设备的宽高 static num screenH 0 设备的宽高 static num devicePixelRatio 0
  • 在IE9使用CORS的思路——XDomainRequest

    前端最常用的就是CORS来调用Restful接口 但是IE9却真够侘寂的 连常规的XHR都不能完整支持 于是 动手写一遍IE10以下专属的 XDomainRequest 但是我测试了一下XDomainRequest 它能接收html tex
  • 开始学习Webpack-应用TypeScript,配置热加载和Source Map

    项目初始化 采用TypeScript 我们的版本是 node version v8 5 0 npm version 5 5 1 1 2 3 4 npm版本升级了 因为npm最近带来了新特性 本地会生成package lock json 能
  • python程序实例源代码-python实例-兔子和獾(塔防游戏)附源码

    原文 兔子和獾大战python小游戏 英文 https www raywenderlich com 24252 beginning game programming for teens with python 中文 http blog jo
  • Anaconda使用conda连接网络出现错误

    在进行更新或者其他操作时报网络连接错误如下 CondaHTTPError HTTP None None for url https repo continuum io pkg Elapsed None An HTTP error occur
  • java在线播放_Java实现视频在线播放flv视频

    1 首先使用Idea创建一个Spring Boot项目 2 在application properties文件下加入以下代码 进行DEBUG日志输出 配置pom xml文件 logging日志配置 logging level root WA
  • QT connect函数

    connect是信号与槽的连接函数 调用方法大致分为以下几类 以QPushButton为例 一 信号 槽函数均不带参数 connect button SIGNAL clicked this SLOT onbuttonClicked conn
  • C、C++中对json格式数据的解析和封装

    C 首先需要调库 include
  • Linux配置kdump大小,linux6下kdump的配置

    linux6下kdump的配置 背景知识 kexec是一个快速启动机制 允许通过已经运行的内核的上下文启动一个Linux内核 不需要经过BIOS BIOS可能会消耗很多时间 特别是带有众多数量的外设的大型服务器 这种办法可以为经常启动机器的
  • 竞赛 基于机器视觉的火车票识别系统

    文章目录 0 前言 1 课题意义 课题难点 2 实现方法 2 1 图像预处理 2 2 字符分割 2 3 字符识别 部分实现代码 3 实现效果 最后 0 前言 优质竞赛项目系列 今天要分享的是 基于机器视觉的火车票识别系统 该项目较为新颖 适
  • 【Linux入门教程】4 用户管理、系统性能分析、系统日志及日志分析、信号机制与信号处理

    Linux用户管理 在Linux中 有三种用户 Root 用户 也称为超级用户 对系统拥有完全的控制权限 超级用户可以不受限制的运行任何命令 Root 用户可以看做是系统管理员 系统用户 系统用户是Linux运行某些程序所必须的用户 例如
  • Linq的使用方法

    Linq Lamdbe 简单的查询 var ss from r in db Am recProScheme select r var ss1 db Am recProScheme 带where的查询 var ss from r in db
  • 万网免费空间php,免费虚拟主机空间

    免费虚拟主机空间 编辑 概述 许多人选择免费虚拟主机搭建自己的网站或Web技术 事实上免费虚拟主机存在很大风险 如果你需要可靠的 安全的 能快速加载服务的 有技术保障支持的服务 建议你准备一些预算 到正规的买可靠的虚拟主机空间 一 什么是免
  • 多线程快速导入大量数据到mysql

    目录 一 前言 二 多线程分批导入Mysql 3 Future类详解 4 ExecutorService 中 shutdown shutdownNow awaitTermination 含义和区别 一 前言 批量导入3w条数据需要一分多钟
  • 常用的方法封装成Jar包并调用

    在android开发过程中 我们经常会有这种需求 自己封装一个类库jar包 1 把自己写好的封装类只是代码的 直接在Eclipse中导出jar包 在所需要的项目中引用即可 2 如果代码中涉及到res资源文件的调用 通用的方法是把res资源文
  • 类中自身类的对象不能做自己的数据成员

    C 中为什么类中自身类的对象不能做自己的数据成员 但是做静态数据成员 引用类数据成员等可以 pre class cpp student private student a 错误 student b 正确 static student c 正
  • 备战数学建模1-MATLAB矩阵相关

    目录 一 数值数据 二 常用函数 三 变量及其操作 四 矩阵的基础应用 五 MATLAB基本运算 六 字符串处理 七 特殊矩阵 八 矩阵变换 九 矩阵求值 十 矩阵的特征值与特征向量 十一 稀疏矩阵 一 数值数据 1 整型 整型分为有符号整
  • JEESITE4实战之旅(五) 多数据源和图表

    前段时间有点忙 今天得空赶紧继续移植工作 今天要说一说多数据源的配置 自定义复杂查询 以及图表的操作 当然还是根据业务需求来 最近客户想让我在新系统上加一个销售汇总的功能 按月统计各个部门的销售额 废话 不多说 先上最终的效果图 因为汇总的
  • 数组扁平化(flatten)实现方案

    1 2 3 1 2 3 1 2 gt 1 2 3 1 2 3 1 2 上面的转换就是数组的扁平化 将一个嵌套多层的数组 array 转换为只有一层的数组 下面是实现数组扁平化的几种简单方法 1 递归 function flatten1 ar