• 多种方式实现数组的扁平化处理


    //task 1 split方法处理
    1 function flattening(arr) {
    2     let arr1 = (arr + "").split(",");
    3     //此时得到的每一项的字符数组
    4     //接着转数字
    5     let arr2 = arr1.map(item => {
    6         return item * 1;
    7     })
    8     return arr2;
    9 }
    //task 2 递归
     1 function flattening(arr, newArr = []) {
     2     for (let i = 0; i < arr.length; i++) {
     3         if (Array.isArray(arr[i])) {
     4             flattening(arr[i], newArr)
     5         } else {
     6             newArr.push(arr[i])
     7         }
     8     }
     9     return newArr
    10 }
    //task 2.1 递归第二种写法
     1 function flattening(arr) {
     2     var res = [];
     3     arr.map(item => {
     4         if (Array.isArray(item)) {
     5             res = res.concat(flattening(item));
     6         } else {
     7             res.push(item);
     8         }
     9     });
    10     return res;
    11 }
    //task 3 扩展运算符
    1 function flattening(arr) {
    2     while (arr.some(item => Array.isArray(item))) {
    3         arr = [].concat(...arr)
    4     }
    5     return arr;
    6 }
    //task 4 reduce+递归实现
     1 function flattening(arr) {
     2       let newArr=arr.reduce((prev,cur)=>{
     3         return [].concat(prev,cur)
     4     })
     5     
     6     let flag=newArr.some(item=>Array.isArray(item))
     7     if(flag){
     8         return flattening(newArr);
     9     }else{
    10         return newArr
    11     }
    12 }

    其实说了这么多方法 es6有一个封装好的方法可以进行数组扁平化处理  

    Array.flat();

    flat 方法默认没有参数  这时只会降维降一层 

    可以传数字指定降维次数  传个无穷就是全部展开 

    flat放法不会改变原数组  并且不支持node运行

    顺带提一句合并数组的几种方法

    let arr1 = [1, 2];
    let arr2 = [3, 4];
    concat
    arr1 = arr1.concat(arr2);
    扩展运算符
    arr1 = [...arr1, ...arr2];
    或者
    arr1.push(...arr2);
    当数据小的时候三者没有区别 但是数据特别大的时候 concat性能远远高于其他两个
    一条不甘于平凡的咸鱼分享
  • 相关阅读:
    websocket 心跳及重连
    Liunx下 tomcat自动重启脚本,亲测。
    Node.js 安装配置---菜鸟教程,贼好用
    Linux下安装Perl依赖
    Centos 8 虚拟机访问外网
    以后园子可能用的就比较少了qwq
    酒店之王
    git bash here创建项目时无法使用上下箭头
    Win10搭建IIS实现局域网访问网站
    js判断两个对象是否相同的三种方式
  • 原文地址:https://www.cnblogs.com/cq1715584439/p/10742854.html
Copyright © 2020-2023  润新知