前端面试题10(js多位数组变一维数组)

在这里插入图片描述

1. 使用concat()和递归

function flatten(arr) {return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []);
}let multiDimArray = [[1, 2, [3]], 4];
let flatArray = flatten(multiDimArray);
console.log(flatArray); // 输出: [1, 2, 3, 4]

2. Array.prototype.flat()

ES2019引入了flat()方法,可以直接展平数组。

let multiDimArray = [[1, 2, [3]], 4];
let flatArray = multiDimArray.flat(Infinity); // 深度展平
console.log(flatArray); // 输出: [1, 2, 3, 4]

3. Array.prototype.reduce()concat()

let multiDimArray = [[1, 2], [3, 4]];
let flatArray = multiDimArray.reduce((acc, val) => acc.concat(val), []);
console.log(flatArray); // 输出: [1, 2, 3, 4]

4. 扩展运算符和递归

function flatten(arr) {return arr.reduce((acc, val) => Array.isArray(val) ? [...acc, ...flatten(val)] : [...acc, val], []);
}let multiDimArray = [[1, 2, [3]], 4];
let flatArray = flatten(multiDimArray);
console.log(flatArray); // 输出: [1, 2, 3, 4]

5. while循环和push()

let multiDimArray = [[1, 2, [3]], 4];
let flatArray = [];
let stack = [...multiDimArray];while (stack.length) {let next = stack.pop();if (Array.isArray(next)) {stack.push(...next);} else {flatArray.push(next);}
}
flatArray.reverse(); // 因为是反向添加的,所以需要反转
console.log(flatArray); // 输出: [1, 2, 3, 4]

6. Array.prototype.forEach()push()

let multiDimArray = [[1, 2], [3, 4]];
let flatArray = [];
multiDimArray.forEach(subArr => subArr.forEach(item => flatArray.push(item)));
console.log(flatArray); // 输出: [1, 2, 3, 4]

7. for...of循环和Array.isArray()

let multiDimArray = [[1, 2, [3]], 4];
let flatArray = [];
for (const subArr of multiDimArray) {if (Array.isArray(subArr)) {for (const item of subArr) {flatArray.push(item);}} else {flatArray.push(subArr);}
}
console.log(flatArray); // 输出: [1, 2, 3, 4]

8. 使用Array.from()和映射函数

let multiDimArray = [[1, 2], [3, 4]];
let flatArray = Array.from(multiDimArray, (...subArr) => subArr).flat();
console.log(flatArray); // 输出: [1, 2, 3, 4]

9. Generator函数和展开运算符

function* flattenGenerator(arr) {for (const item of arr) {if (Array.isArray(item)) {yield* flattenGenerator(item);} else {yield item;}}
}let multiDimArray = [[1, 2, [3]], 4];
let flatArray = [...flattenGenerator(multiDimArray)];
console.log(flatArray); // 输出: [1, 2, 3, 4]

10. String.split()Number()

这种方法适用于数字数组,且不推荐用于复杂场景,因为会涉及类型转换,可能有精度损失。

let multiDimArray = [[1, 2], [3, 4]];
let flatArray = multiDimArray.join(',').split(',').map(Number);
console.log(flatArray); // 输出: [1, 2, 3, 4]

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

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

相关文章

C++ STL IO流介绍

目录 一:IO流的继承关系: 二:输入输出功能 1. 基本用法 2. 格式化输入 3.非格式化输入 4. 格式化输出 三:流 1. 字符流 2. 向字符流中写入数据 3. 从字符流中读出数据 4. 清空字符流 5.完整的例子 四:文件流 一:IO流的继承关系: 类含义basic_streambuf 读取…

动态规划|剑指 Offer II 093. 最长斐波那契数列

如果数组 arr 中存在三个下标 i、j、k 满足 arr[i]>arr[j]>arr[k] 且 arr[k]arr[j]arr[i],则 arr[k]、arr[j] 和 arr[i] 三个元素组成一个斐波那契式子序列。由于数组 arr 严格递增,因此 arr[i]>arr[j]>arr[k] 等价于 i>j>k。 把这道题…

【qt】TCP的监听 (设置服务器IP地址和端口号)

TCP监听是在自己的IP地址上进行的。 当一个TCP服务器程序启动时,它会绑定到一个特定的IP地址和一个端口号上,以便可以接收来自该IP地址和端口号的传入连接请求. 所以我们要先来获取主机的IP地址和设置端口号. 注意: 服务器程序无法任意设置IP地址&…

Java(七)——多态

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

Qt | QPen 类(画笔)

01、画笔基础 1、需要使用到的 QPainter 类中的函数原型如下: void setPen(const QPen &pen); //设置画笔,void setPen(const QColor &color); //设置画笔,该笔样式为 Qt::SolidLine、宽度为 1,颜色由 color 指定void setPen(Qt::PenStyle style); //设置画笔,该…

什么是SysTick?

一,滴答定时器SysTick SysTick,即滴答定时器,是内核中一个特殊的定时器,用于提供系统级的定时服务。是一个24位递减计时器,具有自动重载值寄存器的功能 。当计数器到达自动重载值时,它会自动重新加载新的计…

隔离级别-隔离级别中的锁协议、隔离级别类型、隔离级别的设置、隔离级别应用

一、引言 1、DBMS除了采用严格的两阶段封锁协议来保证并发事务的可串行化,实现事务的隔离性,也可允许用户选择一个可以保证应用程序正确执行并且能够使并发度最大的隔离性等级 2、通常用隔离级别来描述隔离性等级,以下将主要介绍ANSI 92标准…

上新:NFTScan 正式上线 Bitcoin-Runes 浏览器!

近日,NFTScan 团队正式对外发布了 Bitcoin-Runes 浏览器,将为 Runes 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。Runes 协议的主要目的是定义一种在比特币网络上进行符号化资产交换的方式。它使用 Rune 作为符号化资产的单位&#xf…

【昇思25天学习打卡营打卡指南-第十九天】基于MobileNetv2的垃圾分类

CycleGAN图像风格迁移互换 模型介绍 模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络,来自论文 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 。该模型实现了一种在没有配对示例的情况下学习…

【大模型LLM面试合集】大语言模型基础_NLP面试题

NLP面试题 1.BERT 1.1 基础知识 BERT(Bidirectional Encoder Representations from Transformers)是谷歌提出,作为一个Word2Vec的替代者,其在NLP领域的11个方向大幅刷新了精度,可以说是近年来自残差网络最优突破性的…

从零搭建Prometheus到Grafana告警推送

目录 一、Prometheus源码安装和动态更新配置 二、Prometheus操作面板和常见配置 三、Prometheus常用监控组件exporter配置 3.1 exporter是什么 3.2 有哪些exporter 3.3 exporter怎么用 3.4 实战 node_exporter ​3.5 其它exporter都怎么用 四、Promethus整合新版Sprin…

算法mq 交互通用校验模块设计

背景 当前与算法交互均通过rocketMQ异步交互,绝大部分场景一条请求mq消息应对应一条返回mq,但由于各种原因(消息积压、程序bug),可能会导致返回mq超时未返回或者消息丢失。工程侧针对一些重要场景 case by case的通过…

基础权限存储

一丶要求 建立用户组shengcan,其id为 2000建立用户组 caiwu,其id 为2001建立用户组 jishu,其id 为 2002建立目录/sc,此目录是 shengchan 部门的存储目录,只能被 shengchan 组的成员操作4.其他用户没有任何权限建立目录/cw,此目录…

GIT 使用相关技巧记录

目录 1、commit 用户信息变更 全局用户信息(没有特殊配置的情况下默认直接用全局信息) 特定仓库用户信息(只针对于当前项目) 方法一:修改config文件 方法二:命令方式 2、idea同一代码推向多个远端仓库…

Ubuntu编译 OSG

目录 一、安装步骤 二、配置 1、数据文件配置 2、OSG环境变量配置 一、安装步骤 在Ubuntu上安装OSG(OpenSceneGraph),你可以按照以下步骤操作: 打开终端,更新你的包管理器的包列表: sudo apt update 安装必要的依赖库 sudo apt install libglu1-mesa-dev freeglu…

Java -- 实现MD5加密/加盐

目录 1. 加密的引出2. MD5介绍3. 解决MD5不可解密方法4. 实现加密解密4.1 加密4.2 验证密码 1. 加密的引出 在MySQL数据库中,一般都需要把密码、身份证、电话号码等信息进行加密,以确保数据的安全性。如果使用明文来存储,当数据库被入侵的时…

第七篇——攻谋篇:兵法第一原则——兵力原则,以多胜少

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 微观层面上,也有很多值得深度思考的问题 二、思路&方案 …

CV- 人工智能-深度学习基础知识

一, 深度学习基础知识 1,什么是深度学习?机器学习是实现人工智能的一种途径,深度学习是机器学习的一个子集,也就是说深度学习是实现机器学习的一种方法。2, 传统机器学习算术依赖人工设计特征,并进行特征提取,而深度学习方法不需要人工,而是依赖算法自动提取特征。深度…

MuLan:模仿人类画家的多对象图像生成

在图像生成领域,处理包含多个对象及其空间关系、相对大小、重叠和属性绑定的复杂提示时,现有的文本到图像模型仍面临挑战:当文本提示中包含多个对象,并且这些对象之间存在特定的空间关系时,现有模型往往难以准确地捕捉…

嵌入式c语言4——类型修饰符

register,将变量保存在寄存器中,使得访问速度增加 const是常量,static是静态量,volatile是