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 相关文章推荐
window.js 主要包含了页面的一些操作
Dec 23 Javascript
JavaScript Perfection kill 测试及答案
Mar 23 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
Aug 03 Javascript
$("").click与onclick的区别示例介绍
Sep 25 Javascript
js实现字符串转日期格式的方法
May 20 Javascript
JavaScript中定义类的方式详解
Jan 07 Javascript
js右下角弹出提示框示例代码
Jan 12 Javascript
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
Aug 23 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
Nov 04 jQuery
JS数组方法concat()用法实例分析
Jan 18 Javascript
Vue实现计算器计算效果
Aug 17 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 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开发过程中关于继承的使用方法分享
2011/06/17 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
Js切换功能的简单方法
2010/11/23 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
Python中使用Inotify监控文件实例
2015/02/14 Python
python简单实现旋转图片的方法
2015/05/30 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
python 高阶函数简单介绍
2021/02/19 Python
mysql有关权限的表都有哪几个
2015/04/22 面试题
行政助理岗位职责
2013/11/10 职场文书
小班重阳节活动方案
2014/02/08 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
MySQL创建高性能索引的全步骤
2021/05/02 MySQL