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 相关文章推荐
javascript parseInt 大改造
Sep 27 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
Aug 15 Javascript
node.js中使用q.js实现api的promise化
Sep 17 Javascript
jQuery实现二级下拉菜单效果
Jan 05 Javascript
jquery实现全选功能效果的实现代码
May 05 Javascript
ajax与json 获取数据并在前台使用简单实例
Jan 19 Javascript
Vue.js开发环境快速搭建教程
Mar 17 Javascript
js移动端事件基础及常用事件库详解
Aug 15 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
Node批量爬取头条视频并保存方法
Sep 20 Javascript
vue实现select下拉显示隐藏功能
Sep 30 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 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
一个显示天气预报的程序
2006/10/09 PHP
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
请离开include_once和require_once
2013/07/18 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
Python导入oracle数据的方法
2015/07/10 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
Python对列表的操作知识点详解
2019/08/20 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
C#面试常见问题
2013/02/25 面试题
食堂个人先进事迹
2014/01/22 职场文书
员工拓展培训方案
2014/02/15 职场文书
公司领导班子对照材料
2014/08/18 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
企业催款函范本
2015/06/24 职场文书
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis