牛客JS题(二十一)数组扁平化

news2025/1/23 0:51:56

注释很详细,直接上代码

涉及知识点:

  1. 递归
  2. flat
  3. 字符串操作
  4. 正则表达式替换

题干:
在这里插入图片描述

我的答案

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <script>
      /**
       * 这题方法确实很多,每种类似咱都举例一种昂,
       * 其他各种组合也都是改变些许,就不多说了
       */
      let arr = [
        [0, 1],
        [2, [3, [4, [5, 6]]]],
      ];
      /**
       * 使用递归实现
       * 当遇到非数组时直接放进数组返回,
       * 遇到数组就递归调用自身,并将返回值拼接起来
       */
      const _flatten = (arr) => {
        // 补全代码

        let result = [];

        arr.forEach((element) => {
          if (Array.isArray(element)) result = result.concat(_flatten(element));
          else result.push(element);
        });
        return result;
      };

      console.log(_flatten(arr));

      /**
       * 使用flat()实现(开发首选)
       * 当然在牛客好像不支持,交题别用这个 
       */
      const _flatten1 = (arr) => arr.flat(Infinity);

      console.log(_flatten1(arr));

      /**
       * 扩展运算符实现
       * 用扩展运算符的小友可能会有误区,
       * 直接使用其实只会扩展第一层的数组,
       * 所以需要使用while循环,
       * 每次循环都会将数组中的数组展开再拼接赋值,
       * 直到数组中没有对象为数组为止 
       */
      const _flatten2 = (arr) => {
        let newArr = JSON.parse(JSON.stringify(arr));
        while (newArr.some((item) => Array.isArray(item)))
          newArr = [].concat(...newArr);
        return newArr;
      };
      console.log(_flatten2(arr));

      /**
       * 字符串操作函数实现
       * toString将数组变成"0,1,2"的形式,
       * 分割再组成数组即可
       */
      const _flatten3 = (arr) => arr.toString().split(",").map(Number);

      console.log(_flatten3(arr));

      /**
       * 使用正则表达式替换实现
       * 一开始我们肯定需要转字符串,但用的是JSON.stringify,
       * 将数组变成"[0,1,2]"的形式,
       * 使用将`[`或者`]`正则表达式进行全局替换为空值,
       * 然后再分割再组成数组即可
       */
      const _flatten4 = (arr) =>
        JSON.stringify(arr)
          .replace(/[\[|\]]/g, "")
          .split(",")
          .map(Number);
          console.log( JSON.stringify(arr)
          .replace(/[\[|\]]/g, ""));
      console.log(_flatten4(arr));
    </script>
  </body>
</html>

博客更新不是很及时,需要看后面内容的可以看看我的gitee仓库

牛客JS题Gitee仓库

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

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

相关文章

Dubbo源码深度解析(中)

接着《Dubbo源码深度解析(上)》继续讲&#xff0c;上篇博客主要讲Dubbo提供的三个注解的作用&#xff0c;即&#xff1a;EnableDubbo、DubboComponentScan、EnableDubboConfig。其中后两个注解是在EnableDubbo上的&#xff0c;因此在启动类上加上EnableDubbo注解&#xff0c;等…

数据分析模型:洞察数据背后的奥秘

数据分析模型&#xff1a;洞察数据背后的奥秘 事件分析模型通过对用户行为事件的深入剖析&#xff0c;能够了解用户在产品上的具体行为&#xff0c;为产品优化和营销策略提供了有力依据。漏斗分析模型则专注于用户转化流程&#xff0c;帮助找出业务流程中的薄弱环节&#xff0c…

[Meachines] [Easy] Sense PFSense防火墙RCE

信息收集 IP AddressOpening Ports10.10.10.60TCP:80,443 $ nmap -p- 10.10.10.60 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 80/tcp open http lighttpd 1.4.35 |_http-title: Did not follow redirect to https://10.10.10.60/ |_http-server-header…

zlm-openRtpServer使用

http://127.0.0.1/index/api/openRtpServer?port50253&tcp_mode1&stream_idtest123&secretLSAjqhPDsC0IcL27hI6U8heTxgnTlZlW使用getRtpInfo查看这个流的情况&#xff0c;注意只有这个端口在接受流的时候&#xff0c;才会返回数据 http://127.0.0.1/index/api/ge…

【文献阅读】TAM: Topology-Aware Margin Loss for Class-Imbalanced Node Classification

Abstract 在类别不平衡的图数据中学习无偏的节点表示是一项具有挑战性的任务&#xff0c;因为相邻节点之间存在相互作用。现有研究的共同点在于&#xff0c;它们根据少数类节点的总体数量“作为一个整体”进行补偿&#xff08;忽略了图中的节点连接&#xff09;&#xff0c;这…

理解<共轭复数乘法,复数乘法,复数除法>

目录 复数乘法共轭复数乘法的理解复数除法 复数乘法 共轭复数乘法的理解 共轭复数乘法&#xff1a;可以理解为滤波&#xff0c;计算两序列的相关。即一个序列固定&#xff0c;另一个序列进行滑动计算该点的累积和。因为傅里叶变换的卷积定理&#xff0c;时域卷积对于频域相乘。…

web漏洞-知识点详解

先放张图&#xff01;右边漏洞比左边漏洞更重要&#xff01;右边漏洞更多&#xff01;重点讲述右边漏洞&#xff01; sql注入 危害情况&#xff1a;可以获取网站数据库中的数据&#xff0c;如果数据中有敏感信息&#xff0c;比如管理员账号密码&#xff0c;就可以登录后台 漏…

学生管理系统之更新和删除、筛选

学生管理系统之更新和删除 建立新的窗口 添加组件 进行布局 使用Widget把二个放在一块,作为一列,然后全选进行栅格布局,最后添加弹簧进行微调。 编写增加的槽函数 在主函数中调用对话框

CC++内存魔术:掌控无形资源

hello,uu们,今天呢我们来详细讲解C&C的内存管理,好啦,废话不多讲,开干 1:C/C内存分布 2:C语言中动态内存管理方式:malloc/calloc/realloc/free 3:C内存管理方式 3.1:new/delete操作内置类型 3.1.1:代码1 3.1.2:代码2 3.2:new和delete操作自定义类型 3.2.1:C语言创建…

初识增强现实(AR)

初识增强现实&#xff08;AR&#xff09; 笔记来源&#xff1a; 1.2023年中国增强现实&#xff08;AR&#xff09;行业研究报告 2.wiki/Augmented reality 3.In-Depth Review of Augmented Reality: Tracking Technologies, Development Tools, AR Displays, Collaborative AR…

js第二天

比较运算符 ==左右两边值是否相等 ===左右两边值和类型是否全相等 !==左右两边是否类型和值全不相等 undefin === null NaN === NaN(错误,NaN不等于任何值) =单等是赋值 ==双等是判断 ===三等是全等,开发中判断是否相等,一般用全等。 console.log 先比较a和a,相…

电脑添加虚拟网卡与ensp互联,互访

一、按照过程 1、打开设备管理器 2、点击网络适配器&#xff0c;点击左上角操作&#xff0c;点击“添加过时硬件” 3、下一页 4、选择“安装我手动从列表选择的硬件”&#xff0c;下一页 5、下拉&#xff0c;选择“网络适配器”&#xff0c;下一页 6、厂商选择“Microsoft”&…

基于MFC对话框吸管实验

1.新建项目 2.将bmp图像放入res文件下 3.导入bmp文件到bitmap 4.在dlg中添加picture控件&#xff0c;修改控件属性&#xff08;Type Image属性&#xff09;&#xff0c;把bitmap资源添加到控件中 5.重写鼠标单击鼠标中键响应事件 6.主要源代码 void CMFC吸管Dlg::OnMButtonDow…

使用Springboot + netty 打造聊天服务之Nacos集群问题记录

目录 1、前言1.1、方法一1.2、方法二 2、方案二实战2.1、在netty服务里加上ws连接、中断事件2.2、在netty服务里加上消息服务 4、总结 使用Springboot netty 打造聊天服务系列文章 第一章 初始搭建工程 第二章 Nacos集群问题记录 1、前言 在使用Springboot Nacos Netty(Web…

SAPUI5基础知识23 - 模型的种类(小结)

1. 背景 在前序的学习中&#xff0c;我们学习了SAPUI5的MVC架构中的各个知识点&#xff0c;包括视图的设计&#xff0c;控制器的设计&#xff0c;以及模型的使用。 在企业级应用程序中&#xff0c;对于数据的处理的需求是很大的&#xff0c;在学习更复杂的数据绑定方式之前&a…

Pr2024苹果(mac)版剪辑软件安装下载(附下载链接)

Adobe Premiere Pro 2024&#xff08;简称PR 2024&#xff09;是一款由Adobe公司开发的专业视频编辑软件&#xff0c;被广泛应用于电影、电视、广告和社交媒体视频的制作。以下是对PR 2024的详细简介&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rN-3kB3KQgn0JswDa…

《学会 SpringMVC 系列 · 剖析初始化》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

win10系统资源监视器磁盘蓝黄线、活动时间代表什么意思?

win10系统资源监视器磁盘蓝黄线、活动时间代表什么意思&#xff1f;在win10系统中磁盘在运行工程中会有不同的数据信息显示&#xff0c;如下图所示&#xff0c;10兆字节/秒、磁盘中蓝线和黄线、活动时间都达标什么意思呢&#xff1f;本文中winwin7小编给大家分享介绍下win10系统…

Python 爬虫入门(六):urllib库的使用方法

Python 爬虫入门&#xff08;六&#xff09;&#xff1a;urllib库的使用方法 前言1. urllib 概述2. urllib.request 模块2.1 发送GET请求2.2 发送POST请求2.3 添加headers2.4 处理异常 3. urllib.error 模块4. urllib.parse 模块4.1 URL解析4.2 URL编码和解码4.3 拼接URL 5. ur…

MySQL主从复制原理及实现教程

MySQL主从复制是一种数据复制技术&#xff0c;通过建立主服务器&#xff08;Master&#xff09;与从服务器&#xff08;Slave&#xff09;之间的数据同步&#xff0c;实现数据的备份、负载均衡和高可用性。 主从复制原理 MySQL binlog(binary log 即二进制日志文件) 主要记录…