广告
返回顶部
首页 > 资讯 > 精选 >JavaScript中数组扁平化的简介
  • 953
分享到

JavaScript中数组扁平化的简介

2023-06-08 01:06:43 953人浏览 薄情痞子
摘要

小编给大家分享一下javascript中数组扁平化的简介,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的特点有哪些Java的特点有哪些1.Java语言作为

小编给大家分享一下javascript数组扁平化的简介,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Java的特点有哪些

Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。2.Java具有简单性、面向对象、分布式安全性、平台独立与可移植性、动态性等特点。3.使用Java可以编写桌面应用程序、WEB应用程序、分布式系统和嵌入式系统应用程序等。

一、递归

for循环是我们在进行数组操作时最容易想到的,在不考虑时间和空间复杂度的时候,递归应该是一个完美的选择!

示例:

输入 const arr = [1, [2, [3, 4, { a: 1 }], null], undefined];`输出 [ 1, 2, 3, 4, { a: 1 }, null, undefined ]

代码:

function flatten(arr) {    let res = [];    for (let i = 0; i < arr.length; i++) {        if (Array.isArray(arr[i])) {            // 因为函数返回的是数组,所以要做拼接处理            res = res.concat(flatten(arr[i]));        } else {            res.push(arr[i])        }    }    return res;}

注意:

  1. 判断数组内元素的基本类型

  2. 如果不是数组:直接存入新数组中

  3. 如果是数组:重复第一步,直到将最后一个不是数组的元素存入到新数组中

二、reduce

先来看看reduce是做什么的:reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。

示例:

输入 const arr = [1, [2, [3, 4, { a: 1 }], null], undefined];`输出 [ 1, 2, 3, 4, { a: 1 }, null, undefined ]

代码:

function flatten(arr) {    return arr.reduce((prev, next) => {        // prev表示上一次操作的结果        return prev.concat(Array.isArray(next) ? flatten(next) : next)    }, [])    // 注意reduce的初始值应该是[],否则无法进行拼接}

注意:

仔细对照方法一方法二,两者思路完全一致——找到数据类型是数组的子元素,对其进行抹平处理,只不过实现的细节略有不同。

唯一需要注意的地方就是拼接时数据的基本类型要以数组开始。

三、apply+some

既然方法二是方法一的变式,那个方法三也可以说是方法二的变式,但不在采用递归的方式,而是一层一层“拆除”嵌套的方式

先来看看用到的api

  • apply:调用一个具有给定this值的函数,以及以一个数组(或类数组对象)的形式提供的参数。

  • some测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值

代码:

function flatten(arr) {    while (arr.some(item => Array.isArray(item))) {        // 只要存在数组类型的元素,就抹平一层        arr = [].concat.apply([], arr)    }    return arr;}

注意:

大家疑惑的点主要在apply,其实主要目的就是减少括号

let res = [];res  = res.concat({});// 等价于[].concat.apply([], [{}])

在本例中:

arr = [].concat.apply([], arr);// 等价于[].concat(1, [2, [3, 4, { a: 1 }], null], undefined)

四、ES6展开运算符

大家可能业也注意到了,方法一到方法三 我们不断的借助现有方法,以精简我们的代码量,本方法也是如此~

我们利用es6的展开运算符(用于取出参数对象的所有可遍历属性,拷贝到当前对象之中),继续精简方法三:

代码:

function flatten(arr) {    while (arr.some(item => Array.isArray(item))) {        // 只要存在数组类型的元素,就抹平一层        arr = [].concat(...arr)    }    return arr;}

五、toString

如果前面四个方法是我们可以实现的主流的方式,那么接下来的几个就是我们可以实现的“非主流”方式,直接上代码!

function flatten(arr) {    return arr.toString().split(',').map(function(item){        return +item    })}

注意:

将数据转换类型存在类型的限制,如果原始数据是这样的:[1, ‘2’],那么就会出现问题

六、正则

假如我们默认了类型会被转换这一缺陷,那么还可以通过更暴力里的方式来将数组扁平化:

function flatten(arr) {    return JSON.stringify(arr).replace(/\[|\]/g, '').split(',');}

注意:

如果是纯数组,貌似没什么问题

function flatten(arr) {    return jsON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '').split(',') + ']')}

但如果数组内存在对象,就需要消除JSON后的后果,这样更严谨一些~

到这里,六种方法算是包括了大部分数组扁平化的实现,那么如果希望将我们的方法“升级”成工具怎么办?这时候我们就要“抄袭”一下loadsh了~

七、实现自己的扁平化工具方法

这里我们简化了loadsh里的flatten函数,具体改动我们来看代码:

 function flatten(array, depth, isStrict, result) {    result || (result = [])    // 边界    if (array == null) return result;    for (const value of array) {        if (depth > 0 && Array.isArray(value)) {            if (depth > 1) {                flatten(value, depth - 1, isStrict, result)            } else {                result.push(...value); // 只拆1层            }        } else if (!isStrict) {            result[result.length] = value        }    }    return result;}
  1. 该方法提供了扁平化层数

const res = flatten([1, 2, [3, 4, [5, 6]], { a: 1 }, null, undefined], 1, false);// [ 1, 2, 3, 4, [ 5, 6 ], { a: 1 }, null, undefined ]
  1. 该方法提供了扁平化后相反的效果

const res = flatten([1, 2, [3, 4, [5, 6]], { a: 1 }, null, undefined], 1, true);// [ 3, 4, [ 5, 6 ] ]const res = flatten([1, 2, [3, 4, [5, 6]], { a: 1 }, null, undefined], 2, true);// [ 5, 6 ]

isStrict参数打开后,扁平后保留了被暴漏出来的元素,剔除了浅层元素。

以上是“JavaScript中数组扁平化的简介”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: JavaScript中数组扁平化的简介

本文链接: https://www.lsjlt.com/news/250766.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中数组扁平化的简介
    小编给大家分享一下JavaScript中数组扁平化的简介,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的特点有哪些Java的特点有哪些1.Java语言作为...
    99+
    2023-06-08
  • JavaScript数组去重和扁平化函数介绍
    目录1、数组扁平化(又称数组降维)方法一:使用 reduce 方法方法二:栈2、数组去重方式一:Set(ES6)方式二:reduce方法三:filter1、数组扁平化(又称数组降维)...
    99+
    2022-11-12
  • JavaScript如何扁平化n维数组
    小编给大家分享一下JavaScript如何扁平化n维数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!扁平化n维数组1.终极篇[...
    99+
    2022-10-19
  • JavaScript这么实现数组扁平化
    这篇“JavaScript这么实现数组扁平化”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2022-10-19
  • JavaScript数组扁平化怎么实现
    这篇“JavaScript数组扁平化怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript数组扁平化怎么...
    99+
    2023-07-02
  • JavaScript中数组扁平化的方法有哪些
    这篇文章将为大家详细讲解有关JavaScript中数组扁平化的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。数组扁平化数组扁平化是指将一个多维数组变为一个一维数...
    99+
    2022-10-19
  • JavaScript扁平数据转tree与tree数据扁平化的方法
    这篇文章主要介绍“JavaScript扁平数据转tree与tree数据扁平化的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript扁平数据转tree与tree数据扁平化的方法”文章...
    99+
    2023-07-02
  • 5种 JavaScript 方式实现数组扁平化
    目录一、数组扁平化概念 二、实现1. reduce2. toString & split3. join & split4. 递归5. 扩展运算符一、数组扁平化概念 ...
    99+
    2022-11-12
  • js实现数组的扁平化
    目录数组扁平化的方式1.使用flat()2.使用正则3.使用reduce()+concat()4.使用函数递归5.使用扩展运算符+concat()总结 数组扁平化...
    99+
    2022-11-12
  • JavaScript中如何使用reduce实现数组扁平化
    这篇文章主要为大家展示了“JavaScript中如何使用reduce实现数组扁平化”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中如何使用r...
    99+
    2022-10-19
  • JavaScript中如何使用flat()实现数组扁平化
    小编给大家分享一下JavaScript中如何使用flat()实现数组扁平化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数组扁平...
    99+
    2022-10-19
  • JavaScript数组常用方法解析及数组扁平化
    目录前言一、常用数组操作方法push末尾追加元素pop删除数组末尾元素sort排序shift数组开头添加元素 && unshift数组开头删除元素数组合并concat...
    99+
    2022-11-13
  • JavaScript中如何使用正则实现数组扁平化
    这篇文章给大家分享的是有关JavaScript中如何使用正则实现数组扁平化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数组扁平化是指将一个多维数组变为一个一维数组const&n...
    99+
    2022-10-19
  • JavaScript数组实现扁平化四种方法详解
    目录1. 常规递归法2. reduce方法3. 扩展运算符实现4. split和toString共同处理数组的扁平化就是将一个嵌套多层的数组 array(嵌套可以是任何层数)转换为只...
    99+
    2022-11-13
    JS数组扁平化 JS数组
  • 怎么解析JavaScript数组去重和扁平化函数
    这篇文章将为大家详细讲解有关怎么解析JavaScript数组去重和扁平化函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、数组扁平化(又称数组降维)flat() 方法会按照一个可指定的深...
    99+
    2023-06-22
  • JavaScript中如何使用函数递归实现数组扁平化
    小编给大家分享一下JavaScript中如何使用函数递归实现数组扁平化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数组扁平化是...
    99+
    2022-10-19
  • js怎样实现数组的扁平化
    js怎样实现数组的扁平化,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。数组扁平化的方式什么是数组扁平化?数组扁平化:指将一个多维数组转化为一个一维数组。例:将下面数组扁平化...
    99+
    2023-06-25
  • JavaScript面试之如何实现数组拍平(扁平化)方法
    目录1 什么叫数组拍平? 2 JS标准库中的数组拍平方法 3 实现一个flat方法 3.1 如何遍历一个数组 3.2 如何判断元素是否为数组 3.3 递归 3.4 初步实现flat方...
    99+
    2022-11-12
  • JavaScript中如何使用正则表达式实现数组扁平化
    这篇文章主要介绍了JavaScript中如何使用正则表达式实现数组扁平化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数组扁平化是指将一个多...
    99+
    2022-10-19
  • JS实现数组扁平化的方法分享
    目录过程什么是扁平化方法一:flat方法二:递归前言 当我们遇到一个 树形结构的数据,或者 多层嵌套 的数组,如果想拿到数组项的 某一个 字段值,操作起来将会很麻烦,这个时候就需要我...
    99+
    2023-05-16
    JS实现数组扁平化 JS数组扁平化 JS数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作