JavaScript 手撕大厂面试题数组扁平化以及增加版本 plus

前言

现在的前端面试手撕题是一个必要环节,有点时候八股回答的不错但是手撕题没写出来就会让面试官印象分大减,很可能就挂了…
在这里插入图片描述

概念

数组的扁平化其实就是将一个多层嵌套的数组转换为只有一层的数组
比如: [1, [2, [3, [4, 5]]]] => [1,2,3,4,5,6]

题目

一、实现一个 flat() easy 难度

function myFlat(arr) {let result = [];for (let i = 0; i < arr.length; i++) {if (Array.isArray(arr[i])) {result = result.concat(myFlat(arr[i]));// res = [...res, ...myFlat(arr[i])] 这样写也可以} else {result.push(arr[i])}}return result
}

二、用递归实现 medium 难度

const flat = arr => {let res = []let rStack = [...arr]while (rStack.length) {let top = rStack.shift()if (Array.isArray(top)) {rStack.unshift(...top)} else {res.push(top)}}return res
}

在这里插入图片描述
三、控制扁平化的深度 medium 难度
depth 为展平的深度 比如 1 就是将整体深度减一

const myFlat = (arr, depth) => {let result = []for (const element of arr) {if (Array.isArray(element) && depth > 0) {result = [...result, ...myFlat(element, depth - 1)]} else {result.push(element)}}return result
}

四、计算嵌套数组的深度 medium 难度
类似层序遍历!

const getDepth = arr => {const queue = [...arr]let depth = 1while (queue.length > 0) {const curLen = queue.lengthfor (let i = 0; i < curLen; i++) {const cur = queue.shift()if (Array.isArray(cur)) {queue.push(...cur)}}depth++}return depth - 1
}

在这里插入图片描述
五、递归控制扁平化的深度 hard 难度

function flattenArrayWithDepth(arr, depth) {const flattenedArray = [];const queue = [{ array: arr, remainingDepth: depth }];while (queue.length > 0) {const { array, remainingDepth } = queue.shift();for (const item of array) {if (Array.isArray(item) && remainingDepth > 0) {queue.push({ array: item, remainingDepth: remainingDepth - 1 });} else {flattenedArray.push(item);}}}return flattenedArray;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习十大经典算法

机器学习算法是计算机科学和人工智能领域的关键组成部分&#xff0c;它们用于从数据中学习模式并作出预测或做出决策。本文将为大家介绍十大经典机器学习算法&#xff0c;其中包括了线性回归、逻辑回归、支持向量机、朴素贝叶斯、决策树等算法&#xff0c;每种算法都在特定的领…

Docker 安装 MySQL

目录 一、查看 MySQL 版本 二、拉取 MySQL 镜像 三、查看本地镜像 四、运行容器 五、停止和启动容器 六、列出正在运行的容器 七、进入容器 八、登录MySQL 一、查看 MySQL 版本 访问 MySQL 镜像库地址&#xff1a;https://hub.docker.com/_/mysql?tabtags 。 可以通…

ODIN_1靶机详解

ODIN_1靶机复盘 下载地址&#xff1a;https: //download.vulnhub.com/odin/odin.ova 靶场很简单&#xff0c;一会儿就打完了。 靶场说明里提醒说加一个dns解析。 我们在/etc/hosts加一条解析 就能正常打开网站了&#xff0c;要么网站打开css是乱的。 这里看到结尾就猜测肯定…

2023年性价比电脑硬件主机推荐|电脑党必备硬件选购攻略

在自主搭建电脑变得流行且显卡价格飙升的这个时代&#xff0c;我想给大家推荐一款特别的产品——NUC&#xff08;Next Unit of Computing&#xff09;。 NUC是Intel所推出的一种「ITX台式机」&#xff0c;截止目前已经迭代了很多型号&#xff0c;比如之前我买过的猛兽峡谷&…

贝锐蒲公英:没有公网IP,多分支企业如何高效远程访问OA系统?

贝锐蒲公英&#xff1a;没有公网IP&#xff0c;多分支企业、移动办公人员如何高效远程访问OA系统&#xff1f; 国内某大型美妆公司&#xff0c;旗下产品覆盖美容护肤品、彩妆、美容仪器、健康食品、SPA美容会所及等多类服务&#xff0c;致力于为客户提供高品质的产品和完善的服…

2.6 伽马校正 一、Gamma校正

一、Gamma校正 颜色空间 通用&#xff1a;sRGB 电影&#xff1a;DCI-P3 电视&#xff1a;Rec-709、PAL等 印刷&#xff1a;CMYK、Adobe RGB 传递函数 我们知道了颜色的颜色值&#xff0c;要在电子设备上显示&#xff0c;就要把它转换为视频信号&#xff0c;传递函数就是用…

SOLIDWORKS中的弹簧设计指南

SOLIDWORKS是一款广泛使用的三维计算机辅助设计软件&#xff0c;可以用于设计各种机械零件和组件&#xff0c;包括弹簧。在SOLIDWORKS中设计弹簧需要注意一些关键点&#xff0c;本文将为您介绍SOLIDWORKS中的弹簧设计指南。 1. 弹簧类型 按受力性质&#xff0c;弹簧类型包括压…

软件测试这个行业究竟能做到多少岁?35岁真的是一个坎?

前言 在国内&#xff0c;软件测试行业是近10多年来随着互联网的飞速发展逐步兴起来的。 随着行业的发展&#xff0c;测试市场的人才缺口也越来越大&#xff0c;能够提供的就业机会也就越来越多&#xff0c;所以很多人都意气风发地投身到测试行业之中&#xff0c;憧憬这自己在这…

【二进制安全】堆漏洞:Double Free原理

参考&#xff1a;https://www.anquanke.com/post/id/241598 次要参考&#xff1a;https://xz.aliyun.com/t/6342 malloc_chunk 的源码如下&#xff1a; struct malloc_chunk { INTERNAL_SIZE_T prev_size; /*前一个chunk的大小*/ INTERNAL_SIZE_T size; /*当前chunk的…

安卓耗电量分析

这里写自定义目录标题 耗电原因分析分析类型 生成分析数据batterystats操作步骤:生成report报告 battery-historian手动编译安装容器安装内容解析 耗电原因分析 下文有阐述&#xff0c;很详细 https://www.cnblogs.com/SA226343/p/6047543.html https://www.cnblogs.com/mytec…

vue element el-upload附件上传、在线预览、下载当前预览文件

上传 在线预览&#xff08;iframe&#xff09;&#xff1a; payload&#xff1a; response&#xff1a; 全部代码&#xff1a; <template><div><el-table :data"tableData" border style"width: 100%"><el-table-column prop"d…

Java三大特征之多态

文章目录 一、多态的概念二、多态实现条件三、重写四、向上转型和向下转型4.1向上转型4.2向下转型 五、多态的优缺点六、避免在构造方法中调用重写的方法 一、多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#x…

持续部署CICD

目录 &#xff08;1&#xff09;CICD的开展场景 &#xff08;2&#xff09;项目实际应用 CICD 是持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;简称。指在研发过程中自动执行一系列脚本来降低开发引入 bug…

tomcat8的安装与服务启动脚本的配置并部署jpress应用

目录 一.了解tomcat8 二.下载安装包 三.安装jdk与tomcat 1.安装jdk 2.安装tomcat &#xff08;1&#xff09;解压安装包并创建软链接 &#xff08;2&#xff09;设置启动用户并更改权限 &#xff08;3&#xff09;编写系统服务文件 &#xff08;4&#xff09;重新加载文件…

ChatGPT结合知识图谱构建医疗问答应用 (一) - 构建知识图谱

一、ChatGPT结合知识图谱 在本专栏的前面文章中构建 ChatGPT 本地知识库问答应用&#xff0c;都是基于词向量检索 Embedding 嵌入的方式实现的&#xff0c;在传统的问答领域中&#xff0c;一般知识源采用知识图谱来进行构建&#xff0c;但基于知识图谱的问答对于自然语言的处理…

python Pandas.rank() 排名函数详解

文章目录 Pandas.rank() 函数详解一、参数解析二、案例分享默认排名降序: ascending Falsemethod minmethod maxmethod firstmethod densena_optionbottompct True Pandas.rank() 函数详解 一、参数解析 method&#xff1a;指定排名时的策略。 默认值为 average&#x…

手机python编程软件怎么用,手机python编程软件下载

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;手机python编程软件保存的代码在哪里&#xff0c;手机python编程软件怎么运行&#xff0c;现在让我们一起来看看吧&#xff01; 原标题&#xff1a;盘点几个在手机上可以用来学习编程的软件 前天在悟空问答的时候&#…

前端生成图片验证码怎么做?

##题记&#xff1a;我们实现一个功能首先想一下我们需要做哪些工作&#xff0c;比如我们需要生成一个随机的图片验证码&#xff0c;我们需要一个就是点击事件获取验证码&#xff0c;通过接口我们去获取图片路径进行渲染就行&#xff0c;这里边还要牵扯一件事情就是获取一个随机…

HTTP之Session、Cookie 与 Application

目录 简介cookiecookie生命周期 sessionsession生命周期 HTTP cookies示例application 简介 cookie、seesion、application三个都会缓存我们用户状态的数据&#xff0c;使得我们在浏览器访问网站时可以更快速的获取到信息。 主要原因在于HTTP协议是无状态的&#xff0c;我们每…

Git笔记--Ubuntu上传本地项目到github

目录 1--基本配置 2--本地上传 1--基本配置 ① 创建ssh-key cd ~/.sshssh-keygen -t rsa -C "邮箱地址"② 查看并关联ssh-key gedit id_rsa.pub 复制内容&#xff0c;在 GitHub 中依次点击 Settings -> SSH and GPG keys -> New SSH key&#xff0c;将 id…