JavaScript 二维数组转一维数组

article/2025/10/16 5:37:34

目录

1. flat()

2. reduce+concat

3. [ ].concat 

4. concat.apply 

5. toString + split (字符串或数值)

6. 遍历判断 

7.多维数组转一维数组


1. flat()

语法:var newArray = arr.flat([depth])

depth(深度):指定要提取嵌套数组的结构深度,默认值为 1

flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回

    const arr = [1,2,3,4,[5,6,7]]console.log(arr.flat()); //[1, 2, 3, 4, 5, 6, 7]

不写参数 默认值为1 可扁平化一层  扁平最外层

        const arr1 = [1,2,3,4,[5,[6,7]]]console.log(arr1.flat()); //[1, 2, 3, 4, 5, [5,6]]

指定扁平化次数

        const arr2 = [1,2,3,4,[5,[6,7]]]console.log(arr2.flat(2)); //[1, 2, 3, 4, 5, 6, 7]

一步到位之转换一维数组  无论几维数组  都变成一维数组

        const arr3 = [1,[2,[3,[4,[5]]]]]console.log(arr3.flat(Infinity))

2. reduce+concat

concat:用来拼接两个或多个数组 不会改变原数组,返回一个新数组

reduce 累加器 参数callback  callback参数:acc,val,idx,arr   acc:作为累加器,每次拿到上一次的返回值,val数组的每一项,idx:索引 默认从0,arr调用reduce 的原数组

        const arr = [1, 2, 3, 4, [5, 6, 7]]console.log(arr.reduce((acc,val)=>acc.concat(val),[])); //[1, 2, 3, 4, 5, 6, 7]

通过[ ] 每次都通过reduce() 拼接数组中的每一项 返回一个新的数组  

3. [ ].concat 

        const arr = [1, 2, 3, 4, [5, 6, 7]]console.log([].concat(...arr));

...arr  1,2,3,4,[5,6,7]

[ ].concat(...arr)   1,2,3,4,[5,6,7]   拼接成一个数组

4. concat.apply 

        const arr = [1, 2, 3, 4, [5, 6, 7]]console.log([].concat.apply([], arr));

 apply的第二个参数要求是一个数组  你可以理解为 先将1进行合并成一个数组 在将2 合并成一个数组 以此类推

5. toString + split (字符串或数值)

split  将字符串类型利用分隔符分隔 转换成数组 

        const arr = [1, 2, 3, 4, [5, 6, 7]]const str = arr.toString() //1,2,3,4,5,6,7  (字符串类型)console.log(str.split(',')); //["1", "2", "3", "4", "5", "6", "7"]

简化 

arr.toString().split(',')

 注意利用 split转换后 每一项变成了字符串类型  如果你只需要字符串类型 到这步已经完成了

 如果你只需要数值类型   可用map 进行对每一项Number转换  字符串类型会转成NaN

        console.log(arr.toString().split(',').map(Number)); //[1, 2, 3, 4, 5, 6, 7]

6. 遍历判断 

        const arr = [1, 2, 3, 4, [5, 6, 7]]const falt = []arr.forEach(it => {if(Array.isArray(it)){falt.push(...it)}else {falt.push(it)}})console.log(falt);

遍历数组中的每一项 如果数组中还有数组 就进行展开(...ES6新语法)添加到数组中 如果没有 就直接添加到数组中

复习判断是否为数组

Array.isArray(数组)

数组 instanceof Array

数组.constructor===Array

中间的判断可简化为三元

        const arr = [1, 2, 3, 4, [5, 6, 7]]const falt = []arr.forEach(it => Array.isArray(it) ? falt.push(...it) : falt.push(it))console.log(falt);

7.多维数组转一维数组

        const arr = [1, 2, 3, 4, [5, [6, 7]]]function recursion(arr) {const falt = []arr.forEach((it, idx) =>  Array.isArray(arr[idx]) ? falt.push(...recursion(arr[idx])) : falt.push(arr[idx]))return falt}console.log(recursion(arr));

 


http://chatgpt.dhexx.cn/article/qAQmrf3t.shtml

相关文章

JavaScript生成二维数组

方法一: new Array(x).fill(new Array(y).fill(0)) 但注意,当一个对象被传递给fill方法时,填充数组的是这个对象的引用。即二维数组的第一个维度中的每一个数组都指向同一个引用,如果向第一个维度中的任一元素执行push&#xff0c…

js一维数组转二维数组

使用场景举例:接口返回一个数组对象,展示时每行固定显示n个,则可将返回的数组转成二维数组[[...n], [...n]...]的形式循环展示。 a.数组元素为基本类型: let baseArray [1, 2, 3, 4, 5, 6, 7, 8];len len baseArray.length;let …

js二维数组变为一维数组

1、用es5的reduce和concat组合 let list[[1,2,3],[4,5,6],[7,8],[9]]let listslist.reduce((a,b)>a.concat(b))console.log(lists)reduce的用法 数组方法reduce用来迭代一个数组,并且把他累积到一个值中。 使用 reduce 方法时,你要传入一个回调函数…

JavaScript 二维数组

二维数组:人为起的名字 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] a[j][i],对角矩阵…

js 二维数组

js二维数组 我们经常会用到二维数组&#xff0c;但是javaScript没有二维数组&#xff0c;那么我们应该咋办呢&#xff1f;就是在一维数组里面在创建一个一维数组。 var arr new Array(10); for (var i 0; i < arr.length; i) {arr[i]new Array(8); //不一定写for循环赋值…

程序员必看的数组详解!

数组 什么是数组&#xff1f; 数组是一组数据有序的集合。数组它是属于复合数据类型。它至少可以存储一个值(它可以存储很多很多值)。 例如我们生活中的仓库&#xff0c;可以存放很多我们需要的工具或物品 为什么要使用数组&#xff1f; 因为在我们工作中 有很多数据是有关…

JavaScript二维数组和函数

一、二维数组 1、什么是二维数组&#xff1f; 通过两个下标&#xff08;索引&#xff09;来确定一个元素。二维数组可以理解为数组的数组。二维数组组织为矩阵&#xff0c;可以表示为行和列的集合。 2、创建方式 2.1、通过new Array&#xff08;&#xff09;创建 2.2、通过…

JavaScript之二维数组

JavaScript本身只支持一维数组&#xff0c;不支持直接定义二维数组&#xff0c;但是我们可以间接地实现二维数组 将一维数组的每个元素又定义为一个数组&#xff0c;即为数组中的元素也是数组&#xff0c;就是二维数组 <!DOCTYPE html> <html lang"en">…

Linux 信号signal\sigaction

转发&#xff1a;作者&#xff0c;故事狗 https://www.jianshu.com/p/f445bfeea40a Linux 信号signal 对于 Linux来说&#xff0c;实际信号是软中断&#xff0c;许多重要的程序都需要处理信号。信号&#xff0c;为 Linux 提供了一种处理异步事件的方法。比如&#xff0c;终端…

linux下sigaction函数,Linux sigaction函数 sa_flags的值

开始对sa_flags有疑问&#xff0c;网上搜到都是这一个程序&#xff0c;就复制来说事&#xff1a; 代码&#xff1a; 1 #include 2 #include 3 #include 4 #include 5 6 void show_handler (int sig) 7 { 8 printf ("i got signal %d\n",sig); 9 …

Linux signal、sigaction的使用总结

目录 一、什么是信号 二、信号的种类 三、信号的处理 —— signal()函数 四、信号处理 —— sigaction()函数&#xff08;扑获信号&#xff09; 五、扑获信号示例 一、什么是信号 信号是UNIX和Linux系统响应某些条件而产生的一个事件&#xff0c;接收到该信号的进程会相应地采取…

sigaction 函数

今天查一个问题&#xff0c;SIGWINCH的处理函数一直不执行&#xff0c;耽搁了不少时间&#xff0c;最后发现是另外一个地方也设置了&#xff0c;处理函数是另外的。。。。 顺便记录下使用例子&#xff1a; 使用 sigaction 函数&#xff1a; signal 函数的使用方法简单&#xf…

信号、signal 函数、sigaction 函数

文章目录 1.信号的基本概念2.利用 kill 命令发送信号3.信号处理的相关动作4.信号与 signal 函数4.1 signal 函数示例一4.2 signal 函数示例二 5.利用 sigaction 函数进行信号处理6.利用信号处理技术消灭僵尸进程 1.信号的基本概念 发送信号是进程之间常用的通信手段。信号用来…

linux sigaction详解

参看文档&#xff1a; https://blog.csdn.net/weixin_43743847/article/details/90299204https://blog.csdn.net/u010150046/article/details/77344438https://bbs.csdn.net/topics/370255407 一&#xff1a;函数原型介绍 int sigaction(int signum, const struct sigaction …

sigaction函数

#include <signal.h> int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact); //The sigaction() system call is used to change the action taken by a process on receipt of a specific signal. sigaction()系统调用用于改变进程在接收…

c语言sigaction,c语言信号处理sigaction

c语言信号处理sigaction (2011-04-18 23:45:19) 标签: c语言 信号处理 sigaction sighup it 分类: c 信号安装函数sigaction(int signum,const struct sigaction *act,struct sigaction *oldact)的第二个参数是一个指向sigaction结构的指针(结构体名称与函数名一样,千万别弄…

linux中sigaction函数详解

一、函数原型&#xff1a;sigaction函数的功能是检查或修改与指定信号相关联的处理动作&#xff08;可同时两种操作&#xff09; int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);signum参数指出要捕获的信号类型&#xff0c;act参数指定新…

Qt线程QThread详解

目录 前言1.QThread介绍2.QThread示例一3.QThread示例二4.线程同步 前言 在程序中使用线程可以提高程序的性能、并发性、响应性和稳定性&#xff0c;使得程序设计更加灵活和简单。但是&#xff0c;线程编程也有一些挑战&#xff0c;如线程安全性和死锁等问题需要格外注意。我们…

PyQT5 多线程 QThread

PyQT5 多线程 在常规的界面软件中&#xff0c;需要将UI线程和工作线程加以区分&#xff0c;主要原因是某些工作线程很复杂且耗时&#xff0c;比如下载某个文件或者长时间的计算&#xff0c;当执行这些进程时&#xff0c;UI主进程会被阻塞&#xff0c;界面会出现未响应的状态&a…

QThread之moveToThread用法

一、怎么用 使用一个QObject作为Worker&#xff0c;并moveToThread到线程上&#xff0c;那么这个QObject生存在此线程上&#xff0c;其信号会在此线程上发射&#xff0c;其槽函数在此线程上执行。 意味着什么&#xff0c;意味着多线程操作时&#xff0c;若通过信号槽方式&…