zoukankan      html  css  js  c++  java
  • Js如何在原生的数组中实现扁平化函数

    1、概念

    数组扁平化:就是将一个多维数组变成一维数组

    2、实现方式

    方法1:reduce和concat方法

    思想:遍历数组每一项,如果值是数组,进行递归调用

    reduce方法:从数组的第一项开始,逐个遍历到最后,最终迭代数组的所有项

    concat方法:将接收到的参数添加到数组的末尾

    var arr=[1,[2,[3,[4,[5]]]]];
    function flatten(arr) {
        return arr.reduce((result,item)=>{
            return result.concat(Array.isArray(item)?flatten(item):item);
        },[])
    }
    console.log(flatten(arr));

    方法2:ES6扩展运算符和some方法

    思想:对数组进行一次遍历,如果arr中含有数组则进行一次扩展运算符

    some方法:对数组中的每一项运行给定的函数,如果该函数对任一项返回true,该方法返回值为true

    扩展运算符:将一个数组转为用逗号分隔的参数序列(可以将二维数组转换为一维数组)

    function flatten(arr) {
        while(arr.some(item=>Array.isArray(item))){
            arr=[].concat(...arr);
        }
        return arr;
    }
    console.log(flatten(arr));
    

    方法3:递归

    思想:数组中的每一项如果是数组,进行递归调用,否则直接加入到新的数组中

    function flatten(arr) {
        var result=[];
        for (var i=0;i<arr.length;i++) {
            if (Array.isArray(arr[i])){
                result=result.concat(flatten(arr[i]));
            }else{
                result.push(arr[i]);
            }
        }
        return result;
    }

    方法4:toString(或者join) & split

    思想:用toString或者join方法将数组转变为字符串,然后,再用split方法分割还原为数组

    function flatten(arr) {
        return arr.toString().split(',').map(function(item) {
            return Number(item);
        })
    } 

     参考链接:https://www.cnblogs.com/wind-lanyan/p/9044130.html

  • 相关阅读:
    结构体作为函数参数
    自定义子窗口与主窗口通信
    Qt性能问题
    后缀表达式、中缀表达式
    QMap的使用
    自定义QSS
    Qt查找孩子findChild
    ThinkPHP 3.2.3 数据缓存与静态缓存
    Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别  Pig
    Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别  Pig
  • 原文地址:https://www.cnblogs.com/qing-5/p/12849928.html
Copyright © 2011-2022 走看看