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 相关文章推荐
js的event详解。
Sep 06 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 Javascript
页面图片浮动左右滑动效果的简单实现案例
Feb 10 Javascript
DropDownList控件绑定数据源的三种方法
Dec 24 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
js模拟微博发布消息
Feb 23 Javascript
详解AngularJS controller调用factory
May 19 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
Jul 26 Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
KOA+egg.js集成kafka消息队列的示例
Nov 09 Javascript
Layui给switch添加响应事件的例子
Sep 03 Javascript
基于iview-admin实现动态路由的示例代码
Oct 02 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
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
js对象的构造和继承实现代码
2010/12/05 Javascript
javascript Window及document对象详细整理
2011/01/12 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
vue.js实现标签页切换效果
2018/06/07 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
Python三元运算实现方法
2015/01/12 Python
python实现各进制转换的总结大全
2017/06/18 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
python向图片里添加文字
2019/11/26 Python
Python 如何测试文件是否存在
2020/07/31 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
拔河比赛口号
2014/06/10 职场文书
学校创先争优活动总结
2014/08/28 职场文书
农村文化活动总结
2014/08/28 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
感谢信
2019/04/11 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android