js数组扁平化

js二维数组展平

//将 arr=[1,[2],[3,4],[4,[5,6]]] 展平

let arr = [1, [2], [3, 4], [4, [5, 6]], 7];

// 方法一  遍历

function flattenMd(arr) {
  let res = [];
  function flatten(arr) {
    for (let i = 0; i < arr.length; i++) {
      if (Array.isArray(arr[i])) {
        flatten(arr[i]);
      } else {
        res.push(arr[[i]]);
      }
    }
  }
  flatten(arr);
  return res;
}

console.log(flattenMd(arr));

//方法二 concat 只能展开一维

// function flattenArr(arr) {
//   let r = [];
//   for (let i = 0; i < arr.length; i++) {
//     r = r.concat(arr[i]);
//   }
//   return r;
// }
// console.log(flattenArr(arr));

// function flatten2d(arr) {
//   return Array.prototype.concat.apply([], arr);
//   // return [].concat.apply([],arr);
// }
// console.log(flatten2d(arr));

//方法三 concat 迭代
function flattenMd(arr) {
  var result = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] instanceof Array) {
      result = result.concat(flattenMd(arr[i]));
    } else {
      result.push(arr[i]);
    }
  }
  return result;
}
console.log(flattenMd(arr));

//方法四 递归

function flatten(arr) {
  return arr.reduce(function (plane, toBeFlatten) {
    return plane.concat(
      Array.isArray(toBeFlatten) ? flatten(toBeFlatten) : toBeFlatten
    );
  }, []);
}
console.log(flatten(arr));

// 递归的简化版

flatten1 = function (arr) {
  return arr.reduce(
    (plane, toBeFlatten) =>
      plane.concat(
        Array.isArray(toBeFlatten) ? flatten(toBeFlatten) : toBeFlatten
      ),
    []
  );
};

console.log(flatten1(arr));
// 简化

flatten2 = (arr) =>
  arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);

console.log(flatten2(arr));

// 方法五:利用ES6的展开符

// function flatten3(arr) {
//   return [].concat(...arr);
// }

// console.log(flatten3(arr));//只降低一维

// 递归+...
function deepFlatten(arr) {
  flatten = (arr) => [].concat(...arr);
  return flatten(arr.map((x) => (Array.isArray(x) ? deepFlatten(x) : x)));
}

console.log(deepFlatten(arr));

// 方法六 join和split

function flattenMdd(arr) {
  return arr.join().split(",");
}
console.log(flattenMdd(arr));

//方法七 flat 
//flat()按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
function flatArr(arr,flatFlag){
//arr 为传入数组  flatFlag type:number 控制遍历深度
	return arr.flat(flatFlag);
}
console.log(flatArr(arr,1)//[1, 2, 3, 4, 4, [5, 6], 7]
console.log(flatArr(arr,2)//[1, 2, 3, 4, 4, 5, 6, 7]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值