当前位置: 首页 > news >正文

实现数组扁平化的几种方式

目标: 实现数组扁平化[1,[2,[3,4,5]]] ==> [1,2,3,4,5]

我们有几种方法可以实现,分别为:

1、递归

function flatten(list){return list.reduce((tar, cur) => {if(Array.isArray(cur)){tar = tar.concat(flatten(cur));} else {tar.push(cur);}return tar;}, []);
}
flatten([1,[2,[3,4,5]]]) // [1, 2, 3, 4, 5]

递归的方法就是一直合并数组中是数组的元素,这里问题不大,这个方法适用于结构相对简单的数据,如果数据量特别的大,使用递归的话,回应性性能

2、toString方法

function flatten(list){let str = list.toString();return str.split(',').map(item => +item);
}
flatten([1,[2,[3,4,5]]]) // [1, 2, 3, 4, 5]

使用toString方法可以将数组转化为数组内部元素的字符串,然后针对该字符串返回扁平化的数组,只是这种方法如果遇到包含对象的数组就不行了

3、正则表达式结合JSON

function flatten(list){let newStr = JSON.stringify(list).replace(/\[|\]/g, '');return JSON.parse(`[${newStr}]`);
}
flatten([1,[2,[3,4,5]]]) // [1, 2, 3, 4, 5]

这个办法同样适用于结构相对简单的数组,如果遇到包含对象的数组就不行了

4、终极武器flat

[1,100,[2,[3,4,5]]].flat(3) // [1, 100, 2, 3, 4, 5]

利用数组的flat方法可以实现数组的扁平化
flat() 方法创建一个新的数组,并根据指定深度递归地将所有子数组元素拼接到新的数组中。

flat传入的参数,指定要提取嵌套数组的结构深度,默认值为 1。
假使,我们不知道深度是多少的情况下,可以传入Infinity

[1,100,[2,[3,4,5]]].flat(Infinity) // [1, 100, 2, 3, 4, 5]

另外,使用flat() 方法会忽略数组中的空槽。

[1,2,,3,,,,6].flat() // [1,2,3,6]

所以,利用这个特性,我们还可以用它来删除数组的空槽数据哈!

记住吧!

相关文章:

实现数组扁平化的几种方式

目标: 实现数组扁平化[1,[2,[3,4,5]]] > [1,2,3,4,5] 我们有几种方法可以实现,分别为: 1、递归 function flatten(list){return list.reduce((tar, cur) > {if(Array.isArray(cur)){tar tar.concat(flatten(cur));} else {tar.push(cur);}return tar;}, []); } flatt…...

3D打印技术正悄然重塑模具工业格局

虽被誉为“工业之母”的模具在批量生产中仍占据核心地位,但3D打印以其“无模”直接成型的特性,在小批量、非标准化及复杂结构件制造领域展现出独特优势,随着技术和装备的不断发展,目前3D打印正逐渐向批量生产渗透,某品…...

深入解析 KMZ 文件的处理与可视化:从数据提取到地图展示项目实战

文章目录 1. KMZ 文件与 KML 文件简介1.1 KMZ 文件1.2 KML 文件 2. Python 环境配置与依赖安装3. 代码实现详解3.1 查找 KMZ 文件3.2 解压 KMZ 文件3.3 解析 KML 文件3.4 可视化 KMZ 数据 4. 项目实战4.1. 数据采集4.2. 项目完整代码 5. 项目运行与结果展示6. 总结与展望 在处理…...

YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构和使用方式)

YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构) 本文介绍论文原理介绍网络代码多种yaml设置网络测试及实验结果<!-- 这里放入论文图片 --> &emsp;;本文介绍 本文给大家带来的改进机制是结合MobileNetV4骨干网络,其中来自2024.5月发布的MobileNetV4…...

学习安卓开发遇到的问题

问题1&#xff1a;学习禁用与恢复按钮中&#xff1a; java代码报错&#xff1a;报错代码是 R.id.btn_enable;case R.id.btn_disable;case R.id.btn_test: 代码如下&#xff1a;&#xff08;实现功能在代码后面&#xff09; package com.example.apptest;import static java.…...

数学建模--禁忌搜索

目录 算法基本原理 关键要素 应用实例 实现细节 python代码示例 总结 禁忌搜索算法在解决哪些具体类型的组合优化问题中最有效&#xff1f; 禁忌搜索算法的邻域结构设计有哪些最佳实践或案例研究&#xff1f; 如何动态更新禁忌表以提高禁忌搜索算法的效率和性能&#…...

LeetCode 第136场双周赛个人题解

Q1. 求出胜利玩家的数目 原题链接 Q1. 求出胜利玩家的数目 思路分析 直接模拟 时间复杂度&#xff1a;O(N) AC代码 class Solution { public:int winningPlayerCount(int n, vector<vector<int>>& pick) {unordered_map<int, unordered_map<int, …...

The operation was rejected by your operating system. code CERT_HAS_EXPIRED报错解决

各种报错&#xff0c;试了清缓存&#xff0c;使用管理员权限打开命令行工具&#xff0c;更新npm&#xff0c;都不好使 最终解决&#xff1a;删除 c:/user/admin/ .npmrc...

[Git][基本操作]详细讲解

目录 1.创建本地仓库2.配置 Git3.添加文件1.添加文件2.提交文件3.其他 && 说明 4.删除文件5.跟踪修改文件6.版本回退7.撤销修改0.前言1.未add2.已add&#xff0c;未commit3.已add&#xff0c;已commit 1.创建本地仓库 创建⼀个Git本地仓库&#xff1a;git init运行该命…...

springMVC中从Excel文件中导入导出数据

目录 1. 数据库展示2. 导入依赖3. 写方法3.1 导入数据3.2 导出数据 4. 效果5. 不足6. 参考链接 1. 数据库展示 2. 导入依赖 pom.xml <!--文件上传处理--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId>&…...

C++的STL简介(三)

目录 1.vector的模拟实现 1.1begin&#xff08;&#xff09; 1.2end&#xff08;&#xff09; 1.3打印信息 1.4 reserve&#xff08;&#xff09; 1.5 size&#xff08;&#xff09; 1.6 capacity&#xff08;&#xff09; 1.7 push_back() 1.8[ ] 1.9 pop_back() 1.10 insert&…...

BERT模型

BERT模型是由谷歌团队于2019年提出的 Encoder-only 的 语言模型&#xff0c;发表于NLP顶会ACL上。原文题目为&#xff1a;《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》链接 在前大模型时代&#xff0c;BERT模型可以算是一个参数量比…...

举例说明计算机视觉(CV)技术的优势和挑战

计算机视觉&#xff08;CV&#xff09;技术是通过计算机模拟和处理图像与视频数据来模拟人类视觉的能力。它可以带来许多优势&#xff0c;也面临一些挑战。 优势&#xff1a; 自动化&#xff1a;CV技术可以自动处理大量的图像和视频数据&#xff0c;从而提高工作效率和准确性。…...

Animate软件基础:关于补间动画中的图层

Animate 文档中的每一个场景都可以包含任意数量的时间轴图层。使用图层和图层文件夹可组织动画序列的内容和分隔动画对象。在图层和文件夹中组织它们可防止它们在重叠时相互擦除、连接或分段。若要创建一次包含多个元件或文本字段的补间移动的动画&#xff0c;请将每个对象放置…...

mac|安装hashcat(压缩包密码p解)

一、安装Macports&#xff08;如果有brew就不用这一步&#xff09; 根据官网文档&#xff1a;The MacPorts Project -- Download & Installation&#xff0c;安装步骤如下 1、下载MacPorts&#xff0c;这里我用的是tar.gz &#xff0c;可以通过keka&#xff08;keka安装在…...

【保姆级系列:锐捷模拟器的下载安装使用全套教程】

保姆级系列&#xff1a;锐捷模拟器的下载安装使用全套教程 1.介绍2.下载3.安装4.实践教程5.验证 1.介绍 锐捷目前可以通过EVE-NG来模拟自己家的路由器&#xff0c;交换机&#xff0c;防火墙。实现方式是把自己家的镜像导入到EVE-ng里面来运行。下面主要就是介绍如何下载镜像和…...

virtualbox7安装centos7.9配置静态ip

1.背景 我大概在一年之前安装virtualbox7centos7.9的环境&#xff0c;但看视频说用vagrant启动的窗口可以不用第三方工具(比如xshell、secure等)连接centos7.9&#xff0c;于是尝鲜试了下还可以&#xff0c;导致系统文件格式是vmdk了&#xff08;网上有vmdk转vdi的方法&#xf…...

结构型设计模式:桥接/组合/装饰/外观/享元

结构型设计模式&#xff1a;适配器/代理 (qq.com)...

vLLM初识(一)

vLLM初识&#xff08;一&#xff09; 前言 在LLM推理优化——KV Cache篇&#xff08;百倍提速&#xff09;中&#xff0c;我们已经介绍了KV Cache技术的原理&#xff0c;从中我们可以知道&#xff0c;KV Cache本质是空间换时间的技术&#xff0c;对于大型模型和长序列&#xf…...

【Apache Doris】周FAQ集锦:第 18 期

【Apache Doris】周FAQ集锦&#xff1a;第 18 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户…...

ElevenLabs Enterprise方案深度拆解:从API限流策略到GDPR语音数据主权管理的7层安全加固实践

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs Enterprise方案全景概览 ElevenLabs Enterprise 是面向中大型组织构建的语音合成与语音识别一体化平台&#xff0c;专为高并发、多租户、合规性敏感场景设计。其核心能力覆盖实时TTS流式输出…...

告别卡顿!用UltraISO给旧笔记本装Win10和Ubuntu双系统,从制作启动盘到分区配置完整流程

旧笔记本焕新指南&#xff1a;用UltraISO打造Win10与Ubuntu双系统全流程 每次打开那台陪伴多年的旧笔记本&#xff0c;风扇的轰鸣声和系统卡顿的转圈图标都在提醒你——是时候给它一次重生了。不同于直接更换硬件的高成本方案&#xff0c;通过双系统安装让老旧设备重获新生&…...

太流批了,发票合并神器

今天给大家推荐两款软件&#xff0c;一款是图片转PDF&#xff0c;一款是发票合并工具。有需要的小伙伴可以下载收藏。 第一款&#xff1a;png2pdf png2pdf是一款png图片转PDF的小工具&#xff0c;这类的工具之前也有推荐过&#xff0c;但是今天这款比较特殊。 只要把图片拖入软…...

告别‘堆已损坏’:深入理解malloc/new在Win32与x64平台下的内存管理差异

告别‘堆已损坏’&#xff1a;深入理解malloc/new在Win32与x64平台下的内存管理差异 在C/C开发中&#xff0c;内存管理一直是开发者需要面对的核心挑战之一。当项目从32位迁移到64位环境&#xff0c;或者升级Visual Studio版本时&#xff0c;许多团队都会遇到一个令人头疼的问题…...

C++项目集成Tesseract 5.x踩坑实录:从编译选项到内存管理的完整避坑指南

C项目集成Tesseract 5.x踩坑实录&#xff1a;从编译选项到内存管理的完整避坑指南 在计算机视觉和文档处理领域&#xff0c;Tesseract OCR引擎以其开源免费、多语言支持和较高的识别准确率&#xff0c;成为众多C项目的首选集成方案。然而&#xff0c;从源码编译到生产环境部署&…...

告别手动拼报文!用MQTT.fx和OneNet平台快速调试你的ESP8266物联网设备

用MQTT.fx与OneNet构建高效物联网调试工作流 调试物联网设备时&#xff0c;你是否厌倦了反复修改代码、烧录固件、查看串口日志的循环&#xff1f;当ESP8266与OneNet平台通信异常时&#xff0c;传统调试方式往往让我们陷入二进制报文的泥潭。本文将介绍如何通过MQTT.fx这款图形…...

从‘能用’到‘好用’:给你的Vue+Element后台管理系统布局加点儿‘细节’

从‘能用’到‘好用’&#xff1a;VueElement后台管理系统的细节打磨指南 后台管理系统作为企业级应用的核心枢纽&#xff0c;其用户体验直接影响着运营效率和操作愉悦度。许多开发者在完成基础功能搭建后&#xff0c;常常陷入"能用但不好用"的困境——系统虽然跑得通…...

告别并行接口:手把手教你用Stm32F4的SPI高效读取AD7606八通道数据

告别并行接口&#xff1a;手把手教你用Stm32F4的SPI高效读取AD7606八通道数据 在嵌入式系统设计中&#xff0c;AD7606作为一款高性能八通道16位ADC芯片&#xff0c;常被用于电力监测、工业控制等需要多通道高精度采样的场景。传统方案往往依赖其并行接口实现数据读取&#xff…...

二分查找算法:中间值左偏还是右偏?

还记得吗&#xff1f;我们在前面探讨了区间的选择和主循环的停止判断条件&#xff0c;但是没有提到 中间索引位置的计算公式 middle(st, ed)。当区间的长度是奇数时&#xff0c;中间索引只有一个位置 mid (st ed) / 2&#xff0c;而当区间长度是偶数时&#xff0c;中间索引就…...

如何用Rusted PackFile Manager彻底重构全面战争模组开发工作流?

如何用Rusted PackFile Manager彻底重构全面战争模组开发工作流&#xff1f; 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: h…...