前端面试题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 读取…

Python的`queue`模块

队列(Queue) 在Python的queue模块中,Queue类是一个线程安全的队列实现,用于在多线程编程中安全地交换信息。它遵循先入先出(FIFO)的原则。Queue类提供了几种主要的方法: put(item): 将一个项目…

动态规划|剑指 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。 把这道题…

OPPO手机终极保活方案

Push应用解决CPU休眠应用锁OPPO的电源设置和应用省电设置 要保证OPPO手机的性能足够, 比如内存8G, 否则可能会因为性能不足而被杀死 为了保证长期流畅运行, 应该设置手机定时重启, 比如通过系统设置每天重启, 部分手机不重启会慢慢变卡 需要大量测试去验证方案的普遍性, 就算…

odoo文档的安装

步骤 1: 安装必要的软件 确保你已经安装了Git和Python 3.6、3.7或3.8之一。 步骤 2: 克隆 Odoo 文档存储库 打开终端,然后使用Git克隆Odoo的文档存储库。 git clone https://github.com/odoo/documentation.git cd documentation步骤 3: 安装 Python 依赖项 …

java基础--String字符串对象

一.掌握创建String字符串对象的两种方式 方式一(常用) 在程序中直接写字符串变量,就是一个String对象 String s1 "abc"; System.out.println(s1);注意 : 打印字符串类型的变量,是不会看到字符串对象空间地址值的,底层是有优化的,直接看到字符串对象中存储的内容…

代码随想录-DAY①-数组——leetcode 704 | 27

704 思路 定义查找的范围 [left,right],初始查找范围是整个数组。每次取查找范围的中点 mid,比较 nums[mid] 和 target 的大小,如果相等则 mid 即为要寻找的下标,如果不相等则根据 nums[mid] 和 target 的大小关系将查找范围缩小…

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

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

Java(七)——多态

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

Fortigate 飞塔防火墙CLI – 概述

1,可以通过SSH, Telnet, 或者serial console2,CLI的配置是分级的结构,如下所示:config system interfaceedit "internal"set vdom "root"set ip 192.168.100.99 255.255.255.0set allowaccess p… 1&#xff…

Apipost接口测试工具的原理及应用详解(六)

本系列文章简介: 随着软件行业的快速发展,API(应用程序编程接口)作为不同软件组件之间通信的桥梁,其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此,对API进行严格的测试成为…

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位递减计时器,具有自动重载值寄存器的功能 。当计数器到达自动重载值时,它会自动重新加载新的计…

数学基础 -- 复合函数

函数的复合 函数复合是数学中的一个重要概念,指的是将一个函数的输出作为另一个函数的输入。具体来说,给定两个函数 f f f 和 g g g,函数 f f f 和 g g g 的复合记作 f ( g ( x ) ) f(g(x)) f(g(x)) 或 ( f ∘ g ) ( x ) (f \circ g)(…

掌握Vue插槽:创建灵活且可复用的组件

引言 插槽(Slots)是实现组件化的一个强大工具,它允许开发者在组件内部定义可替换的内容区域 插槽的主要作用包括: 内容分发:允许开发者在组件内部定义内容的“插槽”,然后在使用组件时,通过插…

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

一、引言 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 。该模型实现了一种在没有配对示例的情况下学习…

数据结构学习笔记-十大排序算法

1.插入排序 直接插入排序 //直接插入排序 void InsertSort(int A[], int n){int i,j,temp;for(i1;i<n;i) //将各元素插入已排好序的序列中if(A[i]<A[i-1]){ //若A[i]关键字小于前驱tempA[i]; //用temp暂存A[i]for(ji-1;j>0 && A[j]>temp;--j) …

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

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