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 相关文章推荐
仿163填写邮件地址自动显示下拉(无优化)
Nov 05 Javascript
jQuery select的操作实现代码
May 06 Javascript
js页面跳转常用的几种方式
Nov 25 Javascript
javascript根据像素点取位置示例
Jan 27 Javascript
jquery动态改变form属性提交表单
Jun 03 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
Sep 25 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
Nov 02 Javascript
javascript实现随机生成DIV背景色
Jun 20 Javascript
原生js实现选项卡功能
Mar 08 Javascript
小程序瀑布流组件实现翻页与图片懒加载
May 19 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
Jul 22 Javascript
vue中axios封装使用的完整教程
Mar 03 Vue.js
国庆节到了,利用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之第十天
2006/10/09 PHP
php mysql数据库操作分页类
2008/06/04 PHP
PHP 字符串 小常识
2009/06/05 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
深入理解PHP中的count函数
2016/05/31 PHP
php中__toString()方法用法示例
2016/12/07 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
基于jquery的Repeater实现代码
2010/07/17 Javascript
Js切换功能的简单方法
2010/11/23 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
JS打印彩色菱形的实例代码
2018/08/15 Javascript
Python文件处理
2016/02/29 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Python对象的属性访问过程详解
2020/03/05 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
海外淘书首选:AbeBooks
2017/07/31 全球购物
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
党员教师群众路线个人整改措施
2014/10/28 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
家长评语怎么写
2014/12/30 职场文书