js数组扁平化

1.偶然发现了yield*的用法,天才级别的扁平化方式

  function* iterTree(tree){
      if(Array.isArray(tree)){
          for(let i = 0 ;i<tree.length;i++){
              yield* iterTree(tree[i]);
          }
      }else{
          yield tree;
      }
  }
 let arr1 = [1, 2, ['a', 'b', ['中', '文', [1, 2, 3, [11, 21, 31]]]], 3];
for (const x of iterTree(tree)) {
      console.log(x);
  }

2.利用Array.some方法判断数组中是否还存在数组,es6展开运算符连接数组

function iterTree2(arr) {
    while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}
console.log(iterTree2(arr1));

3.利用array数组的reduce属性,reduce回调函数有四个参数,reduce(( previousValue,currentValue,currentIndex,array)=>{},initial)

   提供了initial的值的时候,previousValue为initial的大小,currentValue为数组的第一个元素值
   没有提供initial的值的时候,preciousValue为数组第一个元素的值,currentValue为第二个元素的值,此后每执行一次,previousValue
function iterTree3(arr) {
    var newArr = arr.reduce((prev, current) => {
         return prev.concat(Array.isArray(current) ? iterTree3(current) : current)
    }, []);
    return newArr;
}
console.log(iterTree3(arr1));

4.es6中的flat函数也可以实现数组的扁平化

let arr1 = [1,2,['a','b',['中','文',[1,2,3,[11,21,31]]]],3];
 console.log( arr1.flat( Infinity ) ); 

目前就这么多吧。。============================================================想到的时候再来

转载于:https://www.cnblogs.com/yinping/p/11232361.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值