美文网首页
数组对象扁平化

数组对象扁平化

作者: 稻草人_9ac7 | 来源:发表于2020-05-21 10:02 被阅读0次
    var arr = [
        {
            name: '孙大神'
        },
        [
            {
                name: '李白'
            },
            {
                name: '李大爷'
            }
        ],
        {
            name: '杜甫'
        },
        {
            name: '杜康'
        },
        [
            {
                name: '扫把星'
            },
            {
                name: '玉皇大帝',
                work: 'boss'
            }
        ]
    ]
    
    var innerArr = []
    function flatObj(arr, obj = {}) {
        arr.forEach(item => {
            if (Object.prototype.toString.call(item) === '[object Object]') {
                let flag = true;
                for (const prop in item) {
                    if (Array.isArray(item[prop])) {
                        flag = false;
                        flatObj(item[prop], obj);
                    } else {
                        obj[prop] = item[prop];
                    }
                }
                flag && innerArr.push(JSON.parse(JSON.stringify(obj)));
            } else if(Object.prototype.toString.call(item) === '[object Array]'){
                flatObj(item, obj);
            }
        });
    }
    flatObj(arr)
    console.log(innerArr)
    

    执行后的结果:

    [ { name: '孙大神' },
      { name: '李白' },  
      { name: '李大爷' },
      { name: '杜甫' },
      { name: '杜康' },
      { name: '扫把星' },
      { name: '玉皇大帝', work: 'boss' } ]
    

    结合数组对象去重和扁平化的小demo

    // 默认的表头数组
    var arr = [{
        tile:'gg'
    },
        {
        tile: 'hh',
        age: 34
        }
    ]
    
    // 新添加的临时表头数组
    var arr1 = [
        {
            tile: 'hh'
        },
        {
            tile: 'YY'
        }
    ]
    
    // 去重函数
    function fn(points) {
        var result = [];
        var obj = {};
        for (var i = 0; i < points.length; i++) {
            if (!obj[points[i].tile]) {
                result.push(points[i]);
                obj[points[i].tile] = true;
            }
        }
        return result
    }
    
    
    // ----------第一步拼接数组---------
    // 拼接数组
    arr.splice(1,0,arr1)
    
    
    
    
    // 扁平化函数
    var innerArr = []
    function flatObj(arr, obj = {}) {
        arr.forEach(item => {
            if (Object.prototype.toString.call(item) === '[object Object]') {
                let flag = true;
                for (const prop in item) {
                    if (Array.isArray(item[prop])) {
                        flag = false;
                        flatObj(item[prop], obj);
                    } else {
                        obj[prop] = item[prop];
                    }
                }
                flag && innerArr.push(JSON.parse(JSON.stringify(obj)));
            } else if(Object.prototype.toString.call(item) === '[object Array]'){
                flatObj(item, obj);
            }
        });
    }
    
    // ---------第二步扁平化---------
    flatObj(arr)
    
    // ----------第三步去重---------
    let vv = fn(innerArr)
    
    // 最终得到的结果
    console.log('vv:', vv)
    
    
    
    
    

    相关文章

      网友评论

          本文标题:数组对象扁平化

          本文链接:https://www.haomeiwen.com/subject/lyaaohtx.html