zoukankan      html  css  js  c++  java
  • 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); 
  • 相关阅读:
    办公室搞笑记(2) 李姐
    世界上疼我的人又少了一个
    带给杨帆的祝福:)
    火:) 火:) 火:)
    我们都是享受寂寞的孩子:)
    복 경 에 갑 니 다 :) 去北京.
    너는 겨울이 좋아요 .我喜欢冬天:)
    2007年:新年,新开始:)
    Nginx 泛域名配置方式
    数据库设计 从零开始系列之一
  • 原文地址:https://www.cnblogs.com/yjiangling/p/13938349.html
Copyright © 2011-2022 走看看