今天看到一道题目,花了半天时间,解了出来
一个数组
var meta = [1,2,[3,4,[5]],6,[7,[8,9,[10,11,[12]]]]];
,通过递归的方式依次取出这个数组中的数据
1、首先,针对这道题,如果不使用递归,最简单的解法,是先对其使用string方法,使用split函数分割字符串
function reduceD(arr){
return arr.toString().split(',').map(x =>parseInt(x,10))
}
然后进入正式结题
2、一般递归方法,使用一个空数组接受值,然后作为参数传入下一个递归
function reduceD(arr, result = []) {
for (let value of arr) {
Array.isArray(value) ? reduceD(value, result) : result.push(value);
}
return result;
};
考虑到之前遇到过的爆栈,想想有没有做尾递归优化的可能,于是
3、使用reduce方法
function reduceD(arr) {
let recive = arr.reduce((a, b) => a.concat(b), []);
if (!recive.filter(x => Array.isArray(x)).length) {
return recive;
}
return reduceD(recive);
}
---FIN---
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。