• 前端日常开发常用功能系列之数组扁平


    这是前端日常开发常用功能这个系列文章的第一篇,该系列是日常开发中一些常用的功能的再总结、再提炼,以防止遗忘,便于日后复习。该系列预计包含以下内容: 防抖、节流、去重、拷贝、最值、扁平、偏函数、柯里、惰性函数、递归、乱序、排序、相等、注入、上传、下载、截图。。。

    数组扁平就是将多维数组转化为一维数组;

    方法一,利用数组原型的toString方法,但是只能用于数组元素都是数值时

    const arr = [1, 3, [1, 4], [2, [5, 65, [8, 9]]]];
    
    const flattenArr = arr.toString().split(',');
    
    // ["1", "3", "1", "4", "2", "5", "65", "8", "9"]

    方法二,循环递归

    const ar = [1, 3, [1, 4], ['a', [5, 65, ['b', 9]]]];
    
        const flatten = arr => {
            let newArr = [];
            for(let i = 0; i < arr.length; i++) {
                if(Array.isArray(arr[i])) {
                    newArr = newArr.concat(flatten(arr[i]));
                } else {
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        };
    
    flatten(ar); // [1, 3, 1, 4, "a", 5, 65, "b", 9]

    方法三,使用es6展开符...

    const ar = [1, 3, [1, 4], ['a', [5, 65, ['b', 9]]]];
    
        const flatten = arr => {
            while(arr.some(item => Array.isArray(item))) {
                arr = [].concat(...arr);
            }
            return arr;
        };
    
        flatten(ar); // [1, 3, 1, 4, "a", 5, 65, "b", 9]

    方法四,使用reduce简化数组

    const ar = [1, 3, [1, 4], ['a', [5, 65, ['b', 9]]]];
    
        const flatten = arr => {
            return arr.reduce((pre, cur) => {
                if(Array.isArray(cur)) return pre.concat(flatten(cur));
                return pre.concat(cur);
            }, []);
        };
    
        flatten(ar); // [1, 3, 1, 4, "a", 5, 65, "b", 9]

    数组扁平化的思路基本就是循环遍历,递归进行扁平化。

  • 相关阅读:
    prim最小生成树
    拓扑排序
    矩阵快速幂
    算法导论————EXKMP
    BZOJ3376: [Usaco2004 Open]Cube Stacking 方块游戏
    BZOJ1711: [Usaco2007 Open]Dining吃饭
    USACO2002 Open:雄伟的山峦
    BZOJ1650: [Usaco2006 Dec]River Hopscotch 跳石子
    BZOJ1734: [Usaco2005 Feb]Aggressive cows 愤怒的牛
    BZOJ2016: [Usaco2010 Feb]Chocolate Eating
  • 原文地址:https://www.cnblogs.com/innooo/p/10438791.html
Copyright © 2020-2023  润新知