zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    Flatten Arrays & flat() & flatMap()

    https://alligator.io/js/flat-flatmap/

    
    "use strict";
    
    /**
     *
     * @author xgqfrms
     * @license MIT
     * @copyright xgqfrms
     * @created 2019-08-13
     *
     * @description 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
     * @augments
     * @example
     * @link https://github.com/yygmind/blog/issues/43
     *
     */
    
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [
            6, 7, 8, 9,
            [
                11, 12,
                [
                    12, 13,
                    [14]
                ]
            ]
        ],
        10,
    ];
    
    let log = console.log;
    
    const autoFlatArray = (arr = []) => {
        let result = [];
        const flatArray = (arr = []) => {
            for (let i = 0; i < arr.length; i++) {
                let item = arr[i];
                if (Array.isArray(item)) {
                    let temp = flatArray(item);
                    result.concat(temp);
                } else {
                    result.push(item);
                }
            }
        };
        flatArray(arr);
        // filter & sort asc
        result = [...new Set(result)].sort((a, b) => a > b ? 1 : -1);
        return result;
    };
    
    let result = autoFlatArray(arr);
    
    log(`result all =`, result);
    // result all = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ]
    
    /*
    const autoFlatArray = (arr = []) => {
        let result = [];
        const flatArray = (arr = []) => {
            for (let i = 0; i < arr.length; i++) {
                let item = arr[i];
                if (Array.isArray(item)) {
                    let temp = flatArray(item);
                    log(`temp`, temp);
                    result.concat(temp);
                    log(`result 1 =`, result);
                } else {
                    result.push(item);
                    log(`result 2 =`, result);
                }
            }
        };
        flatArray(arr, []);
        // filter & sort asc
        result = [...new Set(result)].sort((a, b) => a > b ? 1 : -1);
        return result;
    };
    
    */
    
    
    
    "use strict";
    
    /**
     *
     * @author xgqfrms
     * @license MIT
     * @copyright xgqfrms
     * @created 2019-08-13
     *
     * @description
     * @augments
     * @example
     * @link
     *
     */
    
    let log = console.log;
    
    var arr = [1, 2, 3, 4];
    
    let result1 = arr.flatMap(x => [x * 2]);
    // [2, 4, 6, 8]
    // is equivalent to
    
    // let result2 = arr.reduce((acc, x) => acc.concat([x * 2]), []);
    // [2, 4, 6, 8]
    
    let result2 = arr1.reduce(
        (acc, x) => {
            log(`acc =`, acc);// []
            log(`x =`, x);// 1
            let temp = acc.concat([x * 2]);
            log(`temp =`, temp);
            return temp;
        },
        [],// initialValue
    );
    
    log(`flat array flatMap`, result1);
    log(`flat array reduce`, result2);
    
    /*
    arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
    
    The reducer function takes four arguments:
    
    Accumulator (acc)
    Current Value (cur)
    Current Index (idx)
    Source Array (src)
    
    
    */
    
    
    

    Array & flat

    https://github.com/yygmind/blog/issues/43

    https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/8#issuecomment-520795766

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

    arr.flat(Infinity) === Infinity deep

    
    let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
    
    let result = Array.from(new Set(arr.flat(Infinity))).sort((a,b)=> a > b ? 1: -1);
    
    console.log(`flat array with unique filter & sort`, result);
    // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    
    

    OR

    
    let arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
    
    let result = [...new Set(arr.flat(Infinity))].sort((a,b)=> a > b ? 1: -1);
    
    console.log(`flat array with unique filter & sort`, result);
    // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    
    

  • 相关阅读:
    vs2008及以上的ActiveX测试容器在哪儿
    关于databinding的细节
    C#使用StackTrace获取方法被谁调用
    你是怎么走神的?
    怎样让SoapHttpClientProtocol不使用系统默认代理
    List的FindIndex和ForEach
    List的Capacity
    装箱和拆箱
    FileSystem.DeleteDirectory遇到"无法删除 文件:无法读取源文件或磁盘"
    一段关于测试和自定义Attribute的代码
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/11349814.html
Copyright © 2011-2022 走看看