数组扁平化(四种方法)

数组扁平化:

指将多维数组 array(嵌套可以是任何层数,例如: 1,\[2,3,4,\[5 ] ] )转换为一维数组(例如:1,2,3,4,5 )。

1,\[2,3\],\[4,\[5\] \] \] -------\> \[1,2,3,4,5

方法一: 递归 遍历

具体步骤如下代码所示:

javascript 复制代码
 <script>
        //递归的方法

        //封装函数
        function flatten(arr,newarr){
            //遍历arr数组
            for(var i=0;i<arr.length;i++){
                //判断arr[i]是否为数组  instanceof  判断是否为数组,返回值为true/false
                if(arr[i] instanceof Array){
                    //如果是数组,则递归,再次运行函数
                    flatten(arr[i],newarr);
                }else{
                    //若果不是数组,则将arr[i]推到新数组newarr中
                    newarr.push(arr[i]);
                }
            }
            //返回新数组
            return newarr;
        }
        //给出需要扁平化的数组arr
        var arr=[1,[2,3,[4]],[5,6]];
        //控制台打印
        console.log(flatten(arr,[]));

    </script>

或者:(推荐上边的递归方式解决)

javascript 复制代码
function flat(arr1) {
            let result = [];
            for (let i = 0; i < arr1.length; i++) {
                if (Array.isArray(arr1[i])) {
                    // concat连接两个或更多的数组,不会改变现有的数组,而是返回一个新的数组,不修改原数组
                    result = result.concat(flat(arr1[i]));
                } else {
                    // push向数组的末尾添加一个或更多元素,并返回新的长度,修改原数组
                    result.push(arr1[i]);
                }
            }
            return result;
        }
        var arr1 = [1, [2], [3, 4], [5, [6, [7]]]];
        console.log(flat(arr1));

运行结果:

第二种方法: toString()+split()+map()+parseInt()

javascript 复制代码
var arr2 = [1, [2, [3, [4],5,[6,[7]]]]];
        arr2=arr2.toString();
        arr2=arr2.split(',');
        arr2=arr2.map(function(item){
            return parseInt(item);
        })
        console.log(arr2);

运行结果如下:

第三种方法: 正则 replace和JSON方法

javascript 复制代码
var arr3 = [1, [2, [3, [4, 5]]]];
        function flatten(arr3) {
            var str = JSON.stringify(arr3);
            // console.log(str);
            str = str.replace(/(\[|\])/g, '');
            // console.log(str);
            str = '[' + str + ']';
            // console.log(str);
            return JSON.parse(str);
        }
        console.log(flatten(arr3)); 

运行结果如下:

第四种方法: flat(infinity)

flat()创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。

Infinity 无穷大

javascript 复制代码
var arr4=[1, [2, 3, [4]]];
          var result1=arr4.flat(Infinity);
          console.log(result1);

运行结果如下:

相关推荐
萧瑟余晖32 分钟前
Java深入解析篇十七之Spring Security
java·开发语言·spring
avi91111 小时前
[AI教做人]AI平台做2项目;一个3D模型展示,另一个框架多人
javascript·人工智能·ai·3d模型·3d引擎·顶点和法线
kyriewen1 小时前
我用Claude Code两天干完了团队两周的排期——周报发出去那一刻我就后悔了
前端·javascript·ai编程
用户938515635072 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
油丶酸萝卜别吃3 小时前
jquery-ajax.js 说明文档
前端·javascript·jquery
windliang3 小时前
Claude Code 源码分析(九):子 Agent 如何分叉、继续与回到父会话
前端·javascript·面试
二十雨辰3 小时前
[Java]-Spring面试题
java·开发语言
柒和远方3 小时前
V063: TS 面试必考:interface 与 type 的四大差异,与 LLM Harness 的自动化择优
前端·javascript
_oP_i4 小时前
python 后缀 mjs文件
开发语言·python
汉堡大王95274 小时前
Vue 3 + TS + Element Plus 实战:如何从零搭建企业级违章记录管理 SaaS 前端
前端·javascript·vue.js