2019-06-19:请实现一个 flattenDeep 函数

前言

这是来自于参与刘小夕同学的GitHub项目的每日一题,地址在此,感兴趣的同学可以联系她哟~

请实现一个 flattenDeep 函数,将嵌套的数组扁平化

使用递归实现的方式(我的)

1
flattenDeep([1, [2, [3, [4]], 5]])   // [ 1, 2, 3, 4, 5 ]

实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function isArray (array) {
return typeof array === 'object' && array instanceof Array
}
var result = []
function flatternDeep(array) {
if (!isArray(array)) {
return array
}
// 本质上仍旧是需要递归来解决
array.forEach(arrayItem => {
if (isArray(arrayItem)) {
flatternDeep(arrayItem)
} else {
result.push(arrayItem)
}
})
}

大佬的:flat deep

1
2
3
var arr3 = [1, 2, [3, 4, [5, 6]]];
//使用 Infinity 作为深度,展开任意深度的嵌套数组
arr3.flat(Infinity); // // [1, 2, 3, 4, 5, 6]

flat()简直是黑魔法,请查看MDN

大佬的:栈,先入后出,后入先出

1
2
3
4
5
6
7
8
9
10
11
12
13
const arr = [1, 2, 3, [4, 5, 6, [7, 8, 9, [10, 11, 12]]]];
const flattenDeep = arr => {
const resArr = [];
while (arr.length > 0) {
const next = arr.pop();
if (Object.prototype.toString.call(next) === '[array Object]') {
arr.push(...next);
} else {
resArr.push(next);
};
};
return resArr.reverse();
};

大佬的:reduce

1
const flattenDeep = (arr) => arr.reduce((cur,pre) => cur.concat(Array.isArray(pre) ? flattenDeep(pre) : pre), [])

原文:大专栏  2019-06-19:请实现一个 flattenDeep 函数


猜你喜欢

转载自www.cnblogs.com/jimmykeji/p/11645292.html