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 相关文章推荐
通过Jquery遍历Json的两种数据结构的实现代码
Jan 19 Javascript
JavaScript中instanceof运算符的用法总结
Nov 19 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
Feb 12 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 Javascript
AngularJS表单详解及示例代码
Aug 17 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
BACKBONE.JS 简单入门范例
Oct 17 Javascript
理解 JavaScript EventEmitter
Mar 29 Javascript
原生JS实现手动轮播图效果实例代码
Nov 22 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
May 08 Javascript
ionic+html5+API实现双击返回键退出应用
Sep 17 Javascript
小程序实现图片移动缩放效果
May 26 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
谈谈PHP语法(3)
2006/10/09 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
Python采用raw_input读取输入值的方法
2014/08/18 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
python实现udp聊天窗口
2020/03/31 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
澳大利亚相机之家:Camera House
2017/11/30 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
传播学专业毕业生自荐信
2013/11/04 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
教师考核鉴定意见
2015/06/05 职场文书
关于做家务的心得体会
2016/01/23 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python