码迷,mamicode.com
首页 > 编程语言 > 详细

面试题:JavaScript多维数组转换一维

时间:2015-06-06 00:13:49      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

题目:

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

  写一个方法flatArray(array ),得到[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.递归:

 

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.forEach(或map、reduce等)

 

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;
    }
    
}([]);

 

面试题:JavaScript多维数组转换一维

标签:

原文地址:http://www.cnblogs.com/tww316/p/4555812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!