zoukankan      html  css  js  c++  java
  • JS多维数组转一维

    题目:

      var array = [1, [2, [3, 4], [5, 6]], 7, 8];

      写一个方法 flatArray(),得到数组 [1, 2, 3, 4, 5, 6, 7, 8]

    解答:

      1.低端写法(调用原生方法):

    function flatArray(arr) {
        var temp =  arr.join().split(','),
            len = temp.length,
            result = [];
        for(var i=0; i<len; i++) {
            result.push(parseInt(temp[i]));
        }
        return result;
    }

      2.普通写法1(递归思想):

    function flatArray(arr) {
        var result = [];
        for(var i = 0, l = arr.length; i < l; i++){
            if(arr[i] instanceof Array) {
                result = result.concat(arguments.callee(arr[i]));
                // 或result = result.concat(flatArray.call(this, arr[i]));
            }
            else {
                result.push(arr[i]);
            }
        }
        return result;
    }

      3.普通写法2(利用forEach和三元表达式减少代码量,可读性较差)

    function flatArray(arr) {
        var result = [];
        arr.forEach(function(item, index, origin){
            Array.isArray(item) ? result = result.concat(flatArray(item)) : result.push(item);
        })
        return result;
    }

      4.高端写法(闭包思想):

    var flatArray = function(ret) {
        function toArr(arr) {
            arr.forEach(function(item) {
                item instanceof Array ? toArr(item) : ret.push(item);
            });
        }
        
        return function(arr) {
            toArr(arr);
            return ret;
        }
        
    }([]);

    PS:   

      如有更好的算法(eg:不使用递归),欢迎留言告知,不甚感激。

  • 相关阅读:
    十大经典排序算法最强总结(含JAVA代码实现)
    Java相关官方链接
    强网杯2020(Funhash)
    强网杯2020(主动)
    强网杯2020(upload)
    (内存取证)46届世界技能大赛湖北省选拔赛
    (流量分析)46届世界技能大赛湖北省选拔赛
    CISCO ASA远程任意文件读取
    OOALV 分割屏幕
    Process Doppelg&#228;nging
  • 原文地址:https://www.cnblogs.com/tww316/p/4555812.html
Copyright © 2011-2022 走看看