• JS算法入门(3)-数组扁平化


    数组扁平化指得是将一个多维数组转为一维数组

    1.使用ES6提供的Array.prototype.flat处理

    对于flat,MDN上有详细讲解

     1 let arr = [
     2     [1,2,2],
     3     [3,4,5,5],
     4     [6,7,8,9,[10,11,12,[12,13,[14]]]],
     5     15,16
     6 ]
     7 // flat(depth)  depth:指提取嵌套数组的结构深度,默认值为 1。为Infinity时指提取所有的嵌套数组
     8 arr = arr.flat(Infinity) 
     9 console.log(arr); 
    10 /*输出: [
    11     1,  2,  2,  3,  4,  5,  5,
    12     6,  7,  8,  9, 10, 11, 12,
    13    12, 13, 14, 15, 16
    14  ] */

    2.使用toString(),直接把数组转化成字符串即可

    值得一提的是:数组.toString()之后,不管该数组有多少级,最后都会变为以逗号分隔的字符串(没有中括号和层级),相当于真的扁平化了

    1 arr = arr.toString().split(',').map(item=>Number(item)) 

    将数组转为字符串,再讲字符串split变为数组(这个时候的每一项元素都是字符串),最后将数组中的每一项都转化为number类型

    3.使用JSON.stringify

    arr = JSON.stringify(arr).replace(/[|]/g,'').split(',').map(item=>Number(item)) 

    4.基于数组的some方法进行判断校验,验证数组中的某项有没有符合函数中提供的规则的

    利用Array.from()方法:主要用来判断某个值是否是数组,如果是返回true,否则返回false

    1 while(arr.some(item=>Array.from(item))){
    2     arr = [].concat(...arr) //...arr 每次只能展开一级
    3 }

    5.递归处理

     1 ~function(){
     2     function myFlat(){
     3       let res = [],
     4           _this = this;
     5           let fn = arr => {
     6             for(let i = 0;i< arr.length; i++){
     7                 let item = arr[i];
     8                 if(Array.isArray(item)){//判断是否是数组,如果是递归调用fn()
     9                     fn(item);
    10                     continue;
    11                 }
    12                 res.push(item)  //不是数组则将该项放入res新数组中
    13             }
    14           }
    15            fn(_this)
    16             return res
    17     }
    18     Array.prototype.myFlat = myFlat
    19 }()
    20 arr = arr.myFlat();
    21 console.log(arr); 
  • 相关阅读:
    QT 中如何实现一个简单的动画
    qt 中画线时如何设置笔的颜色和填充
    QT自定义窗口
    qt 中创建一个工作线程(例子)
    QT 获取系统时间
    火狐浏览器 system error code 1722 rpc服务器不可用和谷歌浏览器的插件application/x-print-ladop不支持
    ORA-10858:在要求输入数字处找到非数字字符
    eaeyui-combobox实现组合查询(即实现多个值得搜索)
    Mybatis中的模糊查询
    如何设置像我这样的博客的样式。
  • 原文地址:https://www.cnblogs.com/yjiangling/p/13938349.html
Copyright © 2020-2023  润新知