zoukankan      html  css  js  c++  java
  • 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 ) ); 

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

  • 相关阅读:
    docker学习
    获取程序所有加载的dll名称
    Microsoft.Exchange 发邮件
    EF实体对象解耦
    python并发与futures模块
    python协程
    python上下文管理器
    python迭代器与生成器
    python抽象基类
    python运算符重载
  • 原文地址:https://www.cnblogs.com/yinping/p/11232361.html
Copyright © 2011-2022 走看看