zoukankan      html  css  js  c++  java
  • 多种方式实现数组的扁平化处理

    //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性能远远高于其他两个
    一条不甘于平凡的咸鱼分享
  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/cq1715584439/p/10742854.html
Copyright © 2011-2022 走看看