JavaScript 多维数组转一维数组

面试时还被问到多维数组如何转换成一维数组的问题,这个问题比较灵活,其实也有很多种解法,当然,考虑到面试时候比较紧张,还是踏踏实实的用传统的方法来,和深拷贝一样,依旧是使用递归。

由于没有额外需要考虑的东西,因此这题实际上比起深拷贝来说要简单许多:

var convert = function(arr) {
    var newArr = [];

    arr.forEach(function(val) {
        if (val instanceof Array) {
            Array.prototype.push.apply(newArr, convert(val));
        } else {
            newArr.push(val);
        }
    });

    return newArr;
};

push可以一次push多个arguments,可是我们传数组的话比较方便,那么我们想到的就是使用apply去把需要传入的一系列参数变成一个参数数组,这样的好处是,本来我们需要拼接数组进行连接(因为返回的是Array,现在我们只需要把数组传入就可以了)。

这个方法比较简单,也比较好理解,但是其实还有一种偷懒的方法,非常方便,但由于其精简的取巧,也有一些不方便的地方,但是看到了之后保证吐血:

/**
 * 这种方法的缺陷在于全部都会变成String
 * @param arr
 * @returns {Array}
 */
var simpleWayToConvert = function(arr) {
    return arr.join().split(',');
};

是不是觉得简单爆炸了?这种方法缺点很明显,所有的元素都被分为了String类型,如果原来是数字,还需要后续操作就比较不便了。

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 知识, 代码段, 语法, 题目

添加新评论