CodeSky 代码之空

随手记录自己的学习过程

JavaScript 多维数组转一维数组

2016-03-12 20:55分类: JavaScript评论: 0

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

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

1var convert = function(arr) {
2    var newArr = [];
3
4    arr.forEach(function(val) {
5        if (val instanceof Array) {
6            Array.prototype.push.apply(newArr, convert(val));
7        } else {
8            newArr.push(val);
9        }
10    });
11
12    return newArr;
13};
14

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

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

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

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

评论 (0)