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

面试官:【js多维数组扁平化去重并排序】

文章目录

  • 前言
  • 方法一
  • 方法二
  • 方法三
  • 方法四
  • 总结
  • 后言

前言

hello world欢迎来到前端的新世界


😜当前文章系列专栏:JavaScript
🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力

方法一

使用递归方法扁平化——性能较差

function flatten(arr) {return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []);
}let multiArr = [1, 2, [3, 4, [5, 6], 7], [8, 9]];
let flatArr = flatten(multiArr);let uniqueArr = [...new Set(flatArr)];let sortedArr = uniqueArr.sort((a, b) => {return a - b});console.log(sortedArr);

这种方法使用了递归来扁平化整个数组,可以处理任意多层的嵌套数组。但是,对于非常大的多维数组,递归方法的性能会很差。


方法二

使用ES6的扩展运算符扁平化——性能较差

let multiArr = [1, 2, [3, 4, [5, 6], 7], [8, 9]];
let flatArr = [].concat(...multiArr);let uniqueArr = [...new Set(flatArr)];let sortedArr = uniqueArr.sort((a, b) => {return a - b});console.log(sortedArr);

这种方法使用了ES6的扩展运算符将多维数组扁平化为一维数组,然后使用Set进行去重。但是,它仍然需要创建一个新的数组,因此对于非常大的多维数组,它的性能也不是很好。


方法三

使用reduce方法扁平化——性能较好

let multiArr = [1, 2, [3, 4, [5, 6], 7], [8, 9]];
let flatArr = multiArr.reduce((acc, val) => {return acc.concat(Array.isArray(val) ? val.flat() : val);
}, []);let uniqueArr = [...new Set(flatArr)];let sortedArr = uniqueArr.sort((a, b) => {return a - b});console.log(sortedArr);

这种方法使用了reduce方法对多层嵌套的数组进行扁平化。由于使用了原生的Array.prototype.flat方法,因此它的性能相对较快。但是,需要注意的是flat方法可能无法在所有环境下使用。


方法四

使用迭代方法扁平化——性能最佳

let multiArr = [1, 2, [3, 4, [5, 6], 7], [8, 9]];
let queue = [...multiArr];
let flatArr = [];while(queue.length > 0) {let node = queue.shift();if(Array.isArray(node)) {queue.unshift(...node);} else if(node !== undefined) {flatArr.push(node);}
}let uniqueArr = [...new Set(flatArr)];let sortedArr = uniqueArr.sort((a, b) => {return a - b});console.log(sortedArr);

这种方法使用了迭代方法扁平化数组,没有使用任何递归,也不需要重新分配内存。这使得它在处理大型多维数组时具有更好的性能。


总结

最优解决方案是使用迭代方法扁平化,因为它具有最好的性能,并且不会产生与内存分配相关的问题。但是,如果您需要兼容一些老的浏览器或运行时环境,您可以使用reduce方法扁平化。如果您不需要考虑性能问题,那么递归方法和扩展运算符也是可行的选项。

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

相关文章:

面试官:【js多维数组扁平化去重并排序】

文章目录 前言方法一方法二方法三方法四总结后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:JavaScript 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误&a…...

C#编程题分享(3)

n的阶乘问题 输⼊整数n&#xff0c;输出n的阶乘。 int n Convert.ToInt32(Console.ReadLine()); int jiecheng 1; for (int i 1; i < n 1; i) {jiecheng * i; // 1 * 2 * 3 * .....} Console.WriteLine("{0}的阶乘是&#xff1a;{1}", n, jiecheng); q^n次…...

Redis下载和安装(Windows系统)

通过 GitHub 来下载 Windows 版 Redis 安装包,下载地址&#xff1a;点击前往。 打开上述的下载链接&#xff0c;Redis 支持 32 位和 64 位的 Window 系统&#xff0c;大家根据个人情况自行下载&#xff0c;如图 1 所示&#xff1a; 下载完成后&#xff0c;打开相应的文件夹&a…...

MySQL数据库:开源且强大的关系型数据库管理系统

大家好&#xff0c;我是咕噜-凯撒&#xff0c;数据在当今信息化时代的重要性不可忽视。作为企业和组织的重要资产&#xff0c;数据的管理和存储变得至关重要&#xff0c;MySQL作为一种关系型数据库管理系统&#xff0c;具有非常多的优势&#xff0c;下面简单的探讨一下MySQL数据…...

如何在AD的PCB板做矩形槽孔以及如何倒圆弧角

Altium Designer 22下载安装教程-CSDN博客 如何在AD上创建完整的项目-CSDN博客 开始前&#xff0c;请先安装后AD&#xff0c;并创建好项目。 目录 1. 如何在AD的PCB板做矩形槽孔 2. 如何在AD的PCB板倒圆弧角 1. 如何在AD的PCB板做矩形槽孔 首先&#xff0c;我们进入上面创…...

SpringMVC日志追踪笔记整理

新建logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <configuration><property name"PATH" value"./log/business"></property><appender name"STDOUT" class"ch.qos.logback…...

UML建模图文详解教程06——顺序图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 顺序图概述 顺序图(sequence diagram&#xff0c;也…...

睡前随笔记录

一个人从出生到长大&#xff0c;就像一部手机从新用到旧。手机里面积累了太多的缓存&#xff0c;积累了太多的照片&#xff0c;各种app的数据&#xff0c;安装了各式各样的程序。 所以大概这就是年纪越大&#xff0c;记性越差的原因吗&#xff1f;就像一个屋子&#xff0c;堆满…...

微服务学习|Feign:快速入门、自定义配置、性能优化、最佳实践

RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码 存在下面的问题 代码可读性差&#xff0c;编程体验不统一 参数复杂URL难以维护 Feign的介绍 Feign是一个声明式的http客户端&#xff0c;官方地址: https://github.com/OpenFeign/feign …...

使用【画图】软件修改图片像素、比例和大小

打开电脑画图软件&#xff0c;点击开始 windows附件 画图 在画图软件里选择需要调整的照片&#xff0c;点击文件 打开 在弹出窗口中选择照片后点击打开 照片在画图软件中打开后&#xff0c;对照片进行调整。按图中顺序进行 确定后照片会根据设定的值自动调整 保存…...

DevOps 事后分析

众所周知&#xff0c;系统的变化会带来不稳定&#xff0c;进而引发事故。迁移到 DevOps 使世界各地的组织能够以更小的增量和更高的频率进行发布。这降低了特定版本中失败的风险。另一方面&#xff0c;增加发布数量并不一定会减少待命团队需要响应的事件数量。 事件响应团队的…...

fastdfs-client-java-1.30 maven 打包安装

1. 进入源代码目录&#xff0c;打开cmd mvn clean install 或者 mvn package 问题不大的话会在同级目录target目录下生成打包后文件 2. 当前目录下cmd进行maven安装 mvn install:install-file -DgroupIdorg.csource -DartifactIdfastdfs-client-java -Dversion${version} -D…...

【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 本章将介绍视觉SLAM的基本问题之一&#xff1a;如何描述刚体在三维空间中的运动&#xff1f; 旋转矩阵 点、向量和坐标系 三维空间由3个轴组成&…...

Linux驱动开发笔记(四):设备驱动介绍、熟悉杂项设备驱动和ubuntu开发杂项设备Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134533533 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…...

C/C++ 实现Windows注册表操作

Windows注册表&#xff08;Registry&#xff09;是Windows操作系统中用于存储系统配置信息、用户设置和应用程序数据的一个集中式数据库。它是一个层次结构的数据库&#xff0c;由键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;组成&#xff0c;这些键和值被…...

nginx 模块相关配置及结构理解

文章目录 模块配置结构模块配置指令先看一下 ngx_command_t 结构一个模块配置的demo简单模块配置的案例演示 模块上下文结构模块的定义 模块配置结构 Nginx中每个模块都会提供一些指令&#xff0c;以便于用户通过配置去控制该模块的行为。 Nginx的配置信息分成了几个作用域(sc…...

同时创建多个websoket(初始化多个连接、断开的重连、每个连接定时发消息、每个连接存储接收的数据(vuex或者pinia))

可复制现成代码直接使用&#xff01;&#xff01; 1.下边的例子演示了创建10个WebSocket 实例&#xff0c;当其中某一个连接失败时&#xff0c;会自动进行重连 <template><div></div> </template><script setup> import { ref, reactive, onMo…...

C语言——指针(一)

&#x1f4dd;前言 这篇文章主要带大家初步认识一下指针&#xff0c;供大家理解参考。 主要归纳与讲解&#xff1a; 1&#xff0c;指针与指针变量 2&#xff0c;指针的基本使用&#xff08;如何定义&#xff0c;初始化&#xff0c;引用&#xff09; &#x1f3ac;个人简介&…...

学习量化交易如何入门?

Python 量化入门很简单&#xff0c;只需 3 步就能快速上手! 题主在程序方向没有相关经验&#xff0c;今天就从量化行业的通用语言-Python 着手&#xff0c;教大家如何快速入门。 一、准备工作 在开始 Python 编程之前&#xff0c;首先需要确保你的计算机上安装了合适的 Pytho…...

CSS3动画

在CSS3中新增了一个很有意思的东西&#xff0c;那就是动画&#xff0c;有了动画我们可以做很多的事情&#xff0c;让我为大家介绍一下动画吧&#xff01; 本篇文章关于介绍动画&#xff0c;利用小球移动为你们介绍一下动画 默认样式&#xff1a; <!DOCTYPE html> <ht…...

计算机视觉最佳实践

计算机视觉作为人工智能的核心领域之一&#xff0c;正在深刻改变我们的生活和工作方式。从人脸识别到自动驾驶&#xff0c;从医学影像分析到工业质检&#xff0c;计算机视觉技术的应用场景日益广泛。要构建高效、可靠的计算机视觉系统并非易事&#xff0c;需要遵循一系列最佳实…...

终极指南:如何用HMCL启动器轻松管理你的Minecraft游戏世界

终极指南&#xff1a;如何用HMCL启动器轻松管理你的Minecraft游戏世界 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL&#xff08;Hello Minecraft! Launc…...

告别手动点点点!用CAPL+CANoe搞定UDS诊断自动化测试(附完整脚本)

告别手动点点点&#xff01;用CAPLCANoe搞定UDS诊断自动化测试&#xff08;附完整脚本&#xff09; 在车载电子系统开发中&#xff0c;UDS&#xff08;Unified Diagnostic Services&#xff09;诊断测试是验证ECU功能的重要手段。每次软件迭代都需要重复执行大量测试用例&#…...

OCO-2 二级偏差校正后的 XCO2 和其他选定场数据来自全物理检索,并以每日文件形式汇总,GES DISC 的回顾性处理 V10r (OCO2_L2_Lite_FP)

OCO-2 Level 2 bias-corrected XCO2 and other select fields from the full-physics retrieval aggregated as daily files, Retrospective processing V10r (OCO2_L2_Lite_FP) at GES DISC 简介 版本 10r 是当前数据集版本。旧版本将不再可用&#xff0c;并被版本 10r 取代…...

手把手教你用Keil5 Simulator调试STM32F407:告别硬件,搞定‘access violation’报错

手把手教你用Keil5 Simulator调试STM32F407&#xff1a;告别硬件&#xff0c;搞定‘access violation’报错 当你手边没有STM32开发板&#xff0c;却又急需验证代码逻辑时&#xff0c;Keil5的Simulator功能就是你的救星。但很多初学者在尝试软件仿真时&#xff0c;都会遇到那个…...

Spring AI Alibaba 1.x 系列【39】多智能体(Multi-agent)架构

文章目录1. 概述2. 两种模式2.1 Tool Calling 工具调用模式2.2 Handoffs 智能体交接模式2.3 如何选择3. Agent 文本指令3.1 description&#xff08;能力描述&#xff09;3.2 instruction&#xff08;行为指令&#xff09;3.2.1 AgentInstructionMessage3.2.2 Instruction 占位…...

PDF文件瘦身革命:如何用pdfsizeopt实现无损压缩与专业优化

PDF文件瘦身革命&#xff1a;如何用pdfsizeopt实现无损压缩与专业优化 【免费下载链接】pdfsizeopt PDF file size optimizer 项目地址: https://gitcode.com/gh_mirrors/pd/pdfsizeopt 你是否曾因PDF文件体积过大而无法通过邮件发送&#xff1f;是否在学术投稿时因文件…...

如何快速掌握Photoshop AI插件:SD-PPP新手完整入门指南

如何快速掌握Photoshop AI插件&#xff1a;SD-PPP新手完整入门指南 【免费下载链接】sd-ppp A Photoshop AI plugin 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp 还在为AI绘图和Photoshop之间的繁琐切换而烦恼吗&#xff1f;SD-PPP这款革命性的Photoshop AI插件…...

从PCIe 1.0到5.0:高速串行总线AC耦合电容的‘迁徙史’与选型避坑指南

从PCIe 1.0到5.0&#xff1a;高速串行总线AC耦合电容的‘迁徙史’与选型避坑指南 在高速串行总线技术的演进历程中&#xff0c;PCIe协议无疑是最具代表性的技术标准之一。从2003年发布的PCIe 1.0到近年来的PCIe 5.0&#xff0c;数据传输速率实现了从2.5GT/s到32GT/s的惊人跨越。…...

如何快速掌握llama-cpp-python:从Python调用到多模态AI应用开发

如何快速掌握llama-cpp-python&#xff1a;从Python调用到多模态AI应用开发 【免费下载链接】llama-cpp-python Python bindings for llama.cpp 项目地址: https://gitcode.com/gh_mirrors/ll/llama-cpp-python 在人工智能快速发展的今天&#xff0c;本地部署大型语言模…...