本日看到一道问题,花了半天时候,解了出来
一个数组
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—