js中实现数组扁平化的几种方法

js中实现数组扁平化的几种方法

1、使用递归

function flattenArray(arr) {
  let result = [];
  arr.forEach(item => {
    if (Array.isArray(item)) {//循环item判断是否为数组
      //result = result.concat(flattenArray(item));
      //如为数组则使用concat连接两个数组达到扁平化,后则继续递归实现多维变一维
      result = flattenArray(result.concat(item));//两种方式都可以,个人更喜欢这种
    } else {
      result.push(item);//不是则push进result
    }
  });
  return result;
}

flattenArray([1, [2, [3, [4, 5]]]])//[1, 2, 3, 4, 5]

2、使用reduce函数

依旧使用concat函数实现两个数组的拼接实现扁平化

function flattenArray(arr) {
  return arr.reduce((result, item) => {
    return result.concat(Array.isArray(item) ? flattenArray(item) : item);
  }, []);
}

小tips:reduce函数的回调接受的第一个值为累积值,第二个值为当前值,而回调后的值为可选参数,表示初始的累积值。(在本例子中为[])

3、使用扩展运算符(ES6)

扩展运算符 … 可以用于展开数组,将数组中的元素提取出来作为独立的参数或者合并到另一个数组中。
使用while循环和Array.prototype.some方法判断数组中是否还有子数组。

function flattenArray(arr) {
  while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
  }
  return arr;
}

小tips:some方法,该方法判断数组中是否有某一项符合回调函数的条件,符合则返回true

  1. 使用flat方法(ES2019或为ES10)
//flat 方法的语法:arr.flat ( [depth] ) depth默认为1
//例如let a = [1,[2,3]]     a.flat(1)   [1,2,3]
function flattenArray(arr) {
  return arr.flat(Infinity);//这里传递的参数为处理多少层,通过传递Infinity作为参数,可以处理任意层级的嵌套数组。
}

以上是常见的几种方法,每种方法都有其优缺点和适用场景。选择哪种方法取决于具体的需求和代码环境,加油学习吧少年
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值