如何扁平化2维数组和多维数组

摘要:
DOCTYPEHtml˃文档//展平二维数组{//1。直接使用内置方法flat()将返回一个平坦的数组,而不改变原始数组letarr=[1,2,[3,5],6];letarr1=ar r.flat();安慰日志//[1,2,3,5,6],[1,2,Array,6]//还可以从数组中删除空字符letarr2=[1,2,,4,5];letarr3=arr2.flat();安慰日志;//[1,2,4,5]//flat表示二维阵列控制台。log可以展平//[1,2,3,5,6]}{//2.二维数组使用ES6的reduce和concat方法返回展平数组letarr=[1,2,[3,5],6,[1]];letarr1=arr.reduce;console.log;//[1,2,5,6,1]}//如何展平多维数组yletar4=[1,2],[3,[4,[5]]];安慰日志//[1,2,3,4,5]控制台。日志//[1,2,3,4,5]//2.reduce+concat+isArray+递归letarr=[1,2,[3,4,[5,6,[7,8,[9,10]]];函数flatDeep{//returnarr.reduce((acc,val)=˃acc.concat(Array.isArray(val)?flatDeep:val)returnacc;},[])}; 安慰日志;//[1,2,3,4,5,6,7,8,9,10]//3.展开运算符以展平数组函数flat(){while{arr=[].contat;}returnarr;}安慰日志;//[1,2,3,4,5,6,7,8,9,10]//4.使用Generatorfunction*flat{用于{if{yield*flat;}否则{yieldtitem;}}constflatted=[…flatten];//[1,2,3,4,5,6]//5.如何使用ES5方法展平阵列?LetflatDep1==˃{constantFlat=[];//初始化缓存数组。//开始递归(functionflat(arr){arr.forEach((item)=˃{//forEach可以自动跳过空字符Array.isArray(item?
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 数组的扁平化
        // 扁平化二维数组
        {
            // 1. 直接使用自带的方法flat()会返回一个扁平化后的数组,并不会改变原数组
            let arr = [1, 2, [3, 5], 6];
            let arr1 = arr.flat();
            console.log(arr1, arr);// [1, 2, 3, 5, 6] ,[1, 2, Array(2), 6]
            // 也可以去除数组中的空字符
            let arr2 = [1, 2, , 4, 5];
            let arr3 = arr2.flat();
            console.log(arr3);//[1, 2, 4, 5]
            // 在flat(2)代表可以扁平化2维数组
            console.log(arr.flat(2)); //[1, 2, 3, 5, 6]
        }

        {
            // 2.二维数组使用ES6的reduce和concat方法 返回一个扁平化的数组
            let arr = [1, 2, [3, 5], 6, [1]];
            let arr1 = arr.reduce((acc, val) => acc.concat(val), []);
            console.log(arr1); //[1, 2, 3, 5, 6, 1]
        }


        // 如何扁平化多维数组呢=================================
        {
            // 1.在flat(3)代表可以扁平化3维数组以此类推4,5,6...Infinity(可以扁平化所有多维数组)
            let arr4 = [1, 2, [3, [4, [5]]]];
            console.log(arr4.flat(3)); //[1, 2, 3, 4, 5]
            console.log(arr4.flat(Infinity)); //[1, 2, 3, 4, 5]



            // 2.reduce + concat + isArray + recursivity(递归)
            let arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
            function flatDeep(arr) {
                // return arr.reduce((acc,val)=>acc.concat(Array.isArray(val)?flatDeep(val):val),[]);

                return arr.reduce((acc, val) => {
                    acc.push(Array.isArray(val) ? flatDeep(val) : val)
                    return acc;
                }, [])
            };
            console.log(flatDeep(arr)); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]



            // 3.扩展运算符来进行数组的扁平化
            function flat() {
                while (arr.some(item => Array.isArray(item))) {
                    arr = [].concat(...arr);
                }
                return arr;
            }
            console.log(flat(arr)); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]




            // 4.使用Generator 
            function* flatten(array) {
                for (const item of array) {
                    if (Array.isArray(item)) {
                        yield* flatten(item);
                    } else {
                        yield item;
                    }
                }
            }
            const flattened = [...flatten(arr)];
            // [1, 2, 3, 4, 5, 6]


            

            // 5.如何使用ES5的方法来扁平化数组呢
            let flatDeep1 = (arr) => {
                const arrFlat = [];//初始化缓存数组
                // 开始递归
                (function flat(arr) {
                    arr.forEach((item) => {  //forEach可以自动跳过空字符
                        Array.isArray(item) ? flat(item) : arrFlat.push(item);//判断item是不是数组如果是就递归否则就push到缓存数组
                    })
                })(arr)
                // 返回递归结果
                return arrFlat;
            }
            console.log(flatDeep1(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


            
        }
    </script>
</body>

</html>

免责声明:文章转载自《如何扁平化2维数组和多维数组》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python 打包下载 zipfile &amp;amp; tarfile[Deepin 15] sudo source /etc/profile 提示找不到 source 命令(切换到 root 用户:sudo su)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

UiPath Level 1-Lesson 3. Data Manipulation

学习大纲 如何拆分字符串 如何改变部分字符串的格式 如何在表格中根据条件选中特定的行 1. 标量型变量,集合,表格 活动的属性都有预定义的数据类型。鼠标悬停在属性面板的某个属性上,就会出现相应的提示。 使用右键菜单或Ctrl+K在属性栏创建的变量,会直接设置为属性预定义的类型。 标量型变量 (Scalar Variables):一个单独的固定类...

vue调用组件,组件回调给data中的数组赋值,报错Invalid prop type check failed for prop value. Expecte

报错信息: 代码信息:调用一个tree组件,选择一些信息 <componentsTree ref="typeTreeComponent"   @treeCheck="treeCheck"   :isClearAllChecked=true   :defaultProps="defaultProps"> </componentsTree&...

php变量类型及几个常用的打印方式

变量的数据类型: 1,标量类型:int (整型),float(浮点型),boolean(布尔型),string(字符串型) 2,复合类型:array(数组),object(对象) 3,特殊类型:null(空),resource(资源) 几个常用的打印方式: 1,echo输出一个或多个字符串,他是PHP语句,不是函数,所以他没有返回值 <?php...

php中对象转换数组与数组转换对象实例

用stdClass转换数组为对象                                                                                  Php代码 $arr = array(); $arr['a'] = 1;...

R语言基础-数组和列表

数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, dim),当中data必须是同一类型的数据。dim是各维的长度组成的向量。 1、产生一个三维和四维数组。 例1:xx <- array(1:24, c(3, 4,...

Bzoj 2789: [Poi2012]Letters 树状数组,逆序对

2789: [Poi2012]Letters Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 278  Solved: 185[Submit][Status][Discuss] Description 给出两个长度相同且由大写英文字母组成的字符串A、B,保证A和B中每种字母出现的次数相同。 现在每次可以...