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 相关文章推荐
认识延迟时间为0的setTimeout
May 16 Javascript
Prototype Array对象 学习
Jul 19 Javascript
jQuery 源码分析笔记(5) jQuery.support
Jun 19 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 Javascript
jQuery中after的两种用法实例
Jul 03 Javascript
js设置function参数默认值(适合没有传参情况)
Feb 24 Javascript
控制台报错object is not a function的解决方法
Aug 24 Javascript
javascript中一些util方法汇总
Jun 10 Javascript
JavaScript实现大图轮播效果
Jan 11 Javascript
vue路由拦截及页面跳转的设置方法
May 24 Javascript
JS实现电脑虚拟键盘的操作
Jun 24 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
yii框架无限极分类的实现方法
2017/04/08 PHP
php生出随机字符串
2017/07/06 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
javascript Object与Function使用
2010/01/11 Javascript
input 输入框内的输入事件详细分析
2010/03/17 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
Python中文件遍历的两种方法
2014/06/16 Python
python进阶教程之模块(module)介绍
2014/08/30 Python
进一步理解Python中的函数编程
2015/04/13 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
Python  Django 母版和继承解析
2019/08/09 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
大专自我鉴定范文
2013/10/01 职场文书
演讲稿开场白
2014/01/13 职场文书
人事专员职责
2014/02/22 职场文书
南极大冒险观后感
2015/06/05 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android