【JavaScript源代码】JS数组降维的几种方法详解.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
JS数组降维的几种方法详解 二维数组降维 使用数组实例方法concat和ES6扩展运算符降维 let arr=[1,2,[3,4],5]; let arr1=[].concat(...arr); //先使用扩展运算符打散最外边的数组,concat自带打散粘合数组的功能 console.log(arr1); // [1, 2, 3, 4, 5] //ES6之前用apply打散数据的兼容性写法 var arr2=[1,2,[3,4],5]; var arr3=[].concat.apply([],arr2); console.log(arr3); // [1, 2, 在JavaScript编程中,数组是一种非常重要的数据结构,尤其在处理数据集合时,常常会遇到二维或多维数组。然而,在某些场景下,我们可能需要将这些数组“降维”,也就是将嵌套的数组扁平化成一维数组。本文将详细介绍几种在JavaScript中实现数组降维的方法。 我们可以使用数组的`concat`方法配合ES6的扩展运算符(`...`)来降维二维数组。这种方法简单直观,如下所示: ```javascript let arr = [1, 2, [3, 4], 5]; let arr1 = [].concat(...arr); console.log(arr1); // 输出:[1, 2, 3, 4, 5] ``` 在ES6之前的版本中,可以使用`apply`来达到相同的效果,以确保兼容性: ```javascript var arr2 = [1, 2, [3, 4], 5]; var arr3 = [].concat.apply([], arr2); console.log(arr3); // 输出:[1, 2, 3, 4, 5] ``` 对于更复杂的多维数组降维,我们可以采用递归的方式来处理。下面列举了三种递归降维的实现方法: 1. 使用`some`与`concat`: ```javascript function fun(arr) { arr = [].concat(...arr); let hasArray = arr.some(function (elem) { return Array.isArray(elem); }); if (hasArray) { arr = fun(arr); } return arr; } ``` 2. 使用`forEach`与`instanceof`: ```javascript function fun2(arr) { let ret = []; let toArr = function (arr) { arr.forEach(function (item) { item instanceof Array ? toArr(item) : ret.push(item); }); }; toArr(arr); return ret; } ``` 3. 使用`reduce`与`concat`: ```javascript function fun3(sarr) { return sarr.reduce((pre, val) => { return Array.isArray(val) ? pre.concat(fun3(val)) : pre.concat(val); }, []); } ``` 从ES10开始,JavaScript提供了一个新的数组实例方法`flat()`,专门用来扁平化数组。`flat()`方法可以接受一个可选的深度参数,用于指定要合并的嵌套层数。例如: ```javascript var arr1 = [1, 2, [3, 4]]; arr1.flat(); // 输出:[1, 2, 3, 4] var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // 输出:[1, 2, 3, 4, [5, 6]] var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); // 输出:[1, 2, 3, 4, 5, 6] // 使用 Infinity 作为深度,展开任意深度的嵌套数组 arr3.flat(Infinity); // 输出:[1, 2, 3, 4, 5, 6] ``` 数组降维在JavaScript中可以通过多种方式实现,包括`concat`与扩展运算符、`apply`、递归以及`flat()`方法。选择哪种方式取决于具体需求,如兼容性、效率或代码可读性等。在处理复杂的多维数组时,递归和`flat()`方法往往更为实用,而`flat()`方法则提供了更简洁的语法。
































- 粉丝: 1w+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- git安装包111111
- STM32单片机开发-单片机开发资源
- AirPower-Transformer-Typescript资源
- dubbo-go-Go资源
- Ingenious 工作流引擎-PHP资源
- watermark-js-plus-JavaScript资源
- stm32diansai-电赛资源
- MCM_ICM2021-ProblemD-美赛资源
- 小w的机器学习之路,根据课程学习计划和作业任务,用python实现经典的机器学习算法,提高对机器学习认识和动手实践能力,以希望借助Github平台和各位大佬交流,接受大佬的指点和帮助
- 实用工具:带进度条的文件下载功能
- vcos_apps-智能车资源
- lanqiao-蓝桥杯资源
- 燕山大学马川老师教授的“Python 小白玩数据”课程 2024 年春季学期的相关讲义及作业参考答案 仅供参考学习,文档一切版权、分发权仍归原作者所有
- 2018版Sim-Multibody+MATLAB+Solidworks机械臂动态仿真资源
- day01-Java入门黑马程序员
- 西门子S7-200Smart PLC与威纶通触摸屏在铝材厂熔铸炉监控系统的应用及优化


