JS扁平化数组

/ 前端Javascript / 没有评论 / 475浏览

实现一个深度可控的数组展开函数。

方法一: es6 原生 flat

function flatten(arr, depth = Infinity) {
  return arr.flat(depth);
}

方法二: 递归 + reduce

function flatten(arr, depth = 1) {
  if(depth === 1) {
    return arr.reduce((a,v) => a.concat(v),[]);
  }
  return arr.reduce((a, v) => a.concat(Array.isArray(v) && depth !== 0 ? flatten(v, depth-1) : v),[]);
}

方法三: 递归 + for循环

function flatten(arr, depth = 1) {
  let result = [];
  for (let i = 0; i < arr.length; i++) {
    let item = arr[i];
    if(Array.isArray(item) && depth !== 0){
      result = result.concat(flatten(item, depth-1));
    } else {
      result.push(item);
    }
  }
  return result;
}
var arr2 = [1,[2,3,[4]]];
console.log(flatter(arr2, 1));   // [1,2,3,[4]]
console.log(flatter(arr2, Infinity));  // [1,2,3,4]