数组对象扁平化

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)




你可能感兴趣的:(数组对象扁平化)