重复数组的过滤去重,并且合并不同的属性,比较抽象!具体的看下面的数据格式
var arr = [
{
data: [
{ xh: '1', name: '张三', value: '1360', postion: [{ d: '上海' }] },
{ xh: '2', name: '李四', value: '1120', postion: [{ d: '广州' }] }
]
},
{
data: [
{ xh: '3', name: '李白', value: '1360', postion: [{ d: '北京' }] },
{ xh: '3', name: '李白', value: '1360', postion: [{ d: '重庆' }] },
{ xh: '3', name: '李白', value: '1360', postion: [{ d: '香港' }] }
]
},
{
data: [
{ xh: '4', name: '陆游', value: '1360', postion: [{ d: '苏州' }] },
{ xh: '5', name: '李申', value: '1120', postion: [{ d: '杭州' }] }
]
}
]
},
期望的结果是:
var arr = [
{
data: [
{ xh: '1', name: '张三', value: '1360', postion: [{ d: '上海' }] },
{ xh: '2', name: '李四', value: '1120', postion: [{ d: '广州' }] }
]
},
{
data: [
{ xh: '3', name: '李白', value: '1360', postion: [{ d: '北京' },{ d: '重庆' },{ d: '香港' }] },
]
},
{
data: [
{ xh: '4', name: '陆游', value: '1360', postion: [{ d: '苏州' }] },
{ xh: '5', name: '李申', value: '1120', postion: [{ d: '杭州' }] }
]
}
]
},
实现(暴力破解)的方法如下
arr.forEach(item => {
let beforeData = item.data
let afterData = []
let templateArr = []
for (let i = 0; i < beforeData.length; i++) {
if (!templateArr.includes(beforeData[i].xh)) {
afterData.push({
xh: beforeData[i].xh,
name: beforeData[i].name,
value: beforeData[i].value,
position: [beforeData[i].position && beforeData[i].position[0]]
})
templateArr.push(beforeData[i].xh)
} else {
for (var j = 0; j < afterData.length; j++) {
if (afterData[j].xh == beforeData[i].xh) {
afterData[j].position.push(beforeData[i].position[0])
break
}
}
}
}
item.data = afterData
})
console.info(arr, 'arrarrarrarrarr')
这样就实现了我们想要的结果!