电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JavaScript Array.flat()函數用法解析

瀏覽:147日期:2023-10-16 11:08:33

在過去的幾年中,已經將許多有用的功能添加到Javascript Array全局對象中,這些功能為開發人員在編寫可用于數組的代碼時提供了多種選擇。這些功能提供了許多優點,其中最值得注意的是,雖然在過去的一段時間里,開發人員必須實現自己的復雜邏輯來執行各種數組操作,但現在這些新功能已經不再需要這種自制的實現。本文將探討的有用功能之一是 flat() 函數。

JavaScript的Array.flat()函數深入探討

功能概述

flat() 函數提供了將一組數組項串聯成一個全新的數組并在函數完成后返回新數組的能力。由于這個函數產生了一個全新的數組,所以一旦函數完成操作后,任何包含在原始數組中的現有的、完全獨立的數組都不會被改變,在開始操作之前,不需要采取任何預防措施。

flat() 函數僅采用一個參數,該參數是可選的,唯一的參數是 depth 參數。如果原始數組包含一個或多個嵌套數組結構,則此參數決定函數將多少數組層壓扁為單個層。由于該參數是可選的,所以它的默認值為 1,并且在函數完成時,只有單層數組將被平展到返回的全新數組中。

沒有參數的情況

在介紹了一般的函數行為之后,讓我們看一下 flat() 函數在實踐中是如何工作的一些示例。以下示例說明了未指定參數值的情況:

var array1 = [1, 2, [3, 4], [[5, 6]], [[[7, 8]]], [[[[9, 10]]]]];var array2 = array1.flat();// array2: [1, 2, 3, 4, [5, 6], [[7, 8]], [[[9, 10]]]]

調用 flat() 函數時不帶參數值??紤]到可選參數的默認值,此函數調用與 flat(1) 相同。這意味著原始數組中深度為 1 的任何數組都將被完全展平,以便將其所有內容單獨連接到新數組。原始數組中深度為 2 或更大的任何數組的深度都將減小 1 ,并且這些數組中深度為1的任何單個數組項將單獨連接到新數組。結果,原始數組中包含 3 和 4 的第一個數組被展平,以便將這兩個數組項分別連接到新數組。此外,其余三個嵌套的數組中的每個數組都被串聯到新的數組中,其嵌套深度減少了一個。

正深度

以下示例演示了指定正 depth 參數值的情況:

var array1 = [1, 2, [3, 4], [[5, 6]], [[[7, 8]]], [[[[9, 10]]]]];var array2 = array1.flat(2);// array2: [1, 2, 3, 4, 5, 6, [7, 8], [[9, 10]]]

使用深度參數值 2 調用 flat() 函數。這意味著在原始數組中深度最大為2的任何數組都將被完全展平,以便將其所有內容單獨連接到新數組。原始數組中深度為3或更大的任何數組的深度將減少2,并且這些數組中深度為1或2的任何單個數組項將單獨連接到新數組。結果,包含 3 和 4 以及 5 和 6 的原始數組中的前兩個數組被展平,從而將這四個數組項分別連接到新數組。另外,剩下的兩個嵌套數組都連接到新數組,它們的嵌套深度減少了2。

無限深度

以下示例演示了指定無限 depth 參數值的情況:

var array1 = [1, 2, [3, 4], [[5, 6]], [[[7, 8]]], [[[[9, 10]]]]];var array2 = array1.flat(Infinity);// array2: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

使用 depth 參數值 Infinity 調用 flat() 函數。這意味著原始數組中具有任何深度的所有數組都將被展平,以便將其所有內容單獨連接到新數組。在與 flat() 函數一起使用諸如 Infinity 之類的值時,要記住的一件非常重要的事情是,如果應用程序遇到嵌套得足夠深的數組,則它可能會耗盡內存。盡管此處使用 Infinity 來證明可以將這種值與 flat() 函數一起使用,但建議使用更小的有限參數值,以避免應用程序中發生任何無法預料的錯誤。

零深度

以下示例演示了將 depth 參數值指定為 0 的情況:

var array1 = [1, 2, [3, 4], [[5, 6]], [[[7, 8]]], [[[[9, 10]]]]];var array2 = array1.flat(0);// array2: [1, 2, [3, 4], [[5, 6]], [[[7, 8]]], [[[[9, 10]]]]]

使用深度參數值 0 調用 flat() 函數。這意味著原始數組中包含的任何數組都不會被展平,并且新數組的單個數組項和嵌套數組的組成與原始數組完全相同。

負深度

以下示例演示了指定負深度參數值的情況:

var array1 = [1, 2, [3, 4], [[5, 6]], [[[7, 8]]], [[[[9, 10]]]]];var array2 = array1.flat(-Infinity);// array2: [1, 2, [3, 4], [[5, 6]], [[[7, 8]]], [[[[9, 10]]]]]

使用 depth 參數值 -Infinity 調用 flat() 函數。由于負深度值對于扁平嵌套數組沒有意義,所以在指定負深度參數值的情況下,將使用 0 作為替代。正如前面的示例所演示的那樣,當指定深度參數值為 0 時,原始數組中沒有數組是扁平的,而新數組中各個數組項和嵌套數組的組成與原始數組完全相同。

經驗教訓

關于 flat() 函數,可以從本文中學到一些經驗教訓。首先要記住的是,flat() 函數不會以任何方式改變原始數組中的任何普通或嵌套數組,因此在使用該函數之前無需維護這些數組的狀態。flat() 函數唯一會改變的數組是函數完成后返回的全新數組,它只是使用原始數組的所有內容構建的。

要記住的第二件事是,flat() 函數將刪除原始數組中存在的所有空值。下面的示例演示了該功能的實際作用:

var array1 = [1, , 3, , 5];var array2 = array1.flat();// array2: [1, 3, 5]

盡管原始數組占用了五個位置,而第二個和第四個位置的值未定義,但是 flat() 函數從函數完成后返回的新數組中刪除了這兩個數組項。結果,新數組只包含三個數組項,它們的值不為 undefined。

關于 flat() 函數要記住的第三件事,也是最后一件事,是它的一般用途,以及它如何有助于簡化邏輯,如果沒有一個可用的 flat()函數,要合并任何數組中包含的所有項目,通常的方法是編寫自定義的邏輯來迭代所有的數組,從一個數組中單獨拉出項目,然后把它們放到另一個數組中,可能會考慮到其中的嵌套數組。這樣的邏輯往往比較混亂,而且容易出錯,因此,通過使用抽象的內置函數(如 flat() 函數)來避免它的出現,是一個很好的選擇。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 | 杭州火蝠电商_京东代运营_拼多多全托管代运营【天猫代运营】 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | PAS糖原染色-CBA流式多因子-明胶酶谱MMP-上海研谨生物科技有限公司 | 哔咔漫画网页版在线_下载入口访问指引| 在线钠离子分析仪-硅酸根离子浓度测定仪-油液水分测定仪价格-北京时代新维测控设备有限公司 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 一级建造师培训_一建培训机构_中建云筑建造师培训网校 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 搪玻璃冷凝器_厂家-越宏化工设备| 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) | 股票入门基础知识_股票知识_股票投资大师_格雷厄姆网 | 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 宿舍管理系统_智慧园区系统_房屋/房产管理系统_公寓管理系统 | 雪花制冰机(实验室雪花制冰机)百科 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 湖南长沙商标注册专利申请,长沙公司注册代理记账首选美创! | 七维官网-水性工业漆_轨道交通涂料_钢结构漆 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 无锡不干胶标签,卷筒标签,无锡瑞彩包装材料有限公司 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 齿辊分级破碎机,高低压压球机,立式双动力磨粉机-郑州长城冶金设备有限公司 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 砍排机-锯骨机-冻肉切丁机-熟肉切片机-预制菜生产线一站式服务厂商 - 广州市祥九瑞盈机械设备有限公司 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 粉丝机械,粉丝烘干机,粉丝生产线-招远市远东粉丝机械有限公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 汽液过滤网厂家_安平县银锐丝网有限公司 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 |