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)