将一个高维数组降维的三种写法

本日看到一道问题,花了半天时候,解了出来

一个数组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—

    原文作者:laihaibo
    原文地址: https://segmentfault.com/a/1190000010195306
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞