5种 JavaScript 方式实现数组扁平化


Posted in Javascript onOctober 05, 2021

一、数组扁平化概念

数组扁平化是指将一个多维数组变为一维数组

[1, [2, 3, [4, 5]]]  ------>    [1, 2, 3, 4, 5]

二、实现

1. reduce

遍历数组每一项,若值为数组则递归遍历,否则concat

function flatten(arr) {  
    return arr.reduce((result, item)=> {
        return result.concat(Array.isArray(item) ? flatten(item) : item);
    }, []);
}

reduce是数组的一种方法,它接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce包含两个参数:回调函数,传给total的初始值

// 求数组的各项值相加的和: 
arr.reduce((total, item)=> {  // total为之前的计算结果,item为数组的各项值
    return total + item;
}, 0);

2. toString & split

调用数组的toString方法,将数组变为字符串然后再用split分割还原为数组

function flatten(arr) {
    return arr.toString().split(',').map(function(item) {
        return Number(item);
    })
}

因为split分割后形成的数组的每一项值为字符串,所以需要用一个map方法遍历数组将其每一项转换为数值型

3. join & split

和上面的toString一样,join也可以将数组转换为字符串

function flatten(arr) {
    return arr.join(',').split(',').map(function(item) {
        return parseInt(item);
    })
}

4. 递归

递归的遍历每一项,若为数组则继续遍历,否则concat

function flatten(arr) {
    var res = [];
    arr.map(item => {
        if(Array.isArray(item)) {
            res = res.concat(flatten(item));
        } else {
            res.push(item);
        }
    });
    return res;
}

5. 扩展运算符

es6的扩展运算符能将二维数组变为一维

[].concat(...[1, 2, 3, [4, 5]]);  // [1, 2, 3, 4, 5]

根据这个结果我们可以做一个遍历,若arr中含有数组则使用一次扩展运算符,直至没有为止。

function flatten(arr) {
    while(arr.some(item=>Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}

总结:

到此这篇关于5种 JavaScript 方式实现数组扁平化的文章就介绍到这了,更多相关JavaScript 实现数组扁平化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Stop SQL Server
Jun 21 Javascript
【消息提示组件】,兼容IE6/7&&FF2
Sep 04 Javascript
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
js判断字符长度及中英文数字等
Mar 19 Javascript
跟我学习javascript的prototype使用注意事项
Nov 17 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
JavaScript 数组的进化与性能分析
Sep 18 Javascript
总结javascript三元运算符知识点
Sep 28 Javascript
js中位运算的运用实例分析
Dec 11 Javascript
Koa日志中间件封装开发详解
Mar 09 Javascript
js利用递归与promise 按顺序请求数据的方法
Aug 30 Javascript
浅谈bootstrap layer.open中end的使用方法
Sep 12 Javascript
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
Oct 05 #Javascript
Javascript设计模式之原型模式详细
JS数组方法some、every和find的使用详情
8个JS的reduce使用实例和reduce操作方式
Oct 05 #Javascript
JS 4个超级实用的小技巧 提升开发效率
Oct 05 #Javascript
JavaScript实现简单拖拽效果
Sep 15 #Javascript
一小时迅速入门Mybatis之bind与多数据源支持 Java API
Sep 15 #Javascript
You might like
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
jquery 实现的全选和反选
2009/04/15 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
python 自动提交和抓取网页
2009/07/13 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
python list元素为tuple时的排序方法
2018/04/18 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
python实现电子书翻页小程序
2019/07/23 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
市场营销专业毕业生自荐信
2013/11/02 职场文书
小小的船教学反思
2014/02/21 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
python实现简单反弹球游戏
2021/04/12 Python
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
python如何读取和存储dict()与.json格式文件
2022/06/25 Python