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 相关文章推荐
jquery 模拟雅虎首页的点击对话框效果
Apr 11 Javascript
javascript上传图片前预览图片兼容大多数浏览器
Oct 25 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
Boostrap模态窗口的学习小结
Mar 28 Javascript
Javascript基础_简单比较undefined和null 值
Jun 14 Javascript
JavaScript关于提高网站性能的几点建议(一)
Jul 24 Javascript
AngularJS基础 ng-paste 指令简单示例
Aug 02 Javascript
bootstrap读书笔记之CSS组件(上)
Oct 17 Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 Javascript
实例学习JavaScript读取和写入cookie
Jan 29 Javascript
微信小程序简单的canvas裁剪图片功能详解
Jul 12 Javascript
vue3使用vue-count-to组件的实现
Dec 25 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入门学习笔记之一
2010/10/12 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
python通过ssh-powershell监控windows的方法
2015/06/02 Python
使用Python实现简单的服务器功能
2017/08/25 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
python print 按逗号或空格分隔的方法
2018/05/02 Python
详解python里的命名规范
2018/07/16 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
python将音频进行变速的操作方法
2020/04/08 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
团员的自我评价
2013/12/01 职场文书
自我评价的写作规则
2014/01/06 职场文书
父亲生日宴会答谢词
2014/01/10 职场文书
实验教师岗位职责
2014/02/13 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
秋冬农业生产标语
2014/10/09 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
python中的3种定义类方法
2021/11/27 Python