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 相关文章推荐
关于使用runtimeStyle属性问题讨论文章
Mar 08 Javascript
dojo学习第二天 ajax异步请求之绑定列表
Aug 29 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
Apr 25 Javascript
JavaScript常用脚本汇总(二)
Mar 04 Javascript
javascript解决IE6下hover问题的方法
Jul 28 Javascript
jquery小火箭返回顶部代码分享
Aug 19 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
Oct 12 Javascript
jQuery ajaxForm()的应用
Oct 14 Javascript
JavaScript原型继承_动力节点Java学院整理
Jun 30 Javascript
react native仿微信PopupWindow效果的实例代码
Aug 07 Javascript
php 解压zip压缩包内容到指定目录的实例
Jan 23 Javascript
对angular 实时更新模板视图的方法$apply详解
Oct 09 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
header()函数使用说明
2006/11/23 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
python模拟鼠标拖动操作的方法
2015/03/11 Python
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
python打包成so文件过程解析
2019/09/28 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
QML实现钟表效果
2020/06/02 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
荷兰手表网站:Watch2Day
2018/07/02 全球购物
中职生求职信
2014/07/01 职场文书
财务整改报告范文
2014/11/05 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
银行培训心得体会范文
2016/01/09 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
PHP正则表达式之RCEService回溯
2022/04/11 PHP