zoukankan      html  css  js  c++  java
  • 如何扁平化2维数组和多维数组

    <!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>
  • 相关阅读:
    解决is not a supported wheel on this platform-解决pip has no attribute pep425tags-解决网上旧教程不适用的问题
    语音信号实验1-基于时域分析技术的语音识别
    解决 ModuleNotFoundError: No module named 'pip'
    Typecho如何上传模板和插件
    获取图片的URL链接(Typecho修改背景图片等都需要URL链接)
    ubuntu云服务器安装anaconda+jupyter配置
    ORACLE用户密码过期啦
    关于Nacos启动报如下错:nacos no javac in (usr/lib/jvm-1.8.0)
    记录一次华为云服务器给根目录扩容
    记录一次NFS快照es集群索引备份
  • 原文地址:https://www.cnblogs.com/ximenchuifa/p/14057252.html
Copyright © 2011-2022 走看看