场景需求
- 合并两组数组中有值的数据
- mc作为唯一标识,找到mc一样的数据匹配是否有值
// 最终处理结果
lastDataInfo(list1, list2) {
const keysMc = Object.keys(list1);
let list = {};
for (let index = 0; index < keysMc.length; index++) {
const key = keysMc[index];
if (list2[key]) {
list[key] = this.mergeDatasets(list1[key], list2[key]);
} else {
list[key] = list1[key];
}
}
return list;
},
// 处理当事人代理人数据
mergeChildData(childA, childB) {
const childMcMapA = {};
const noMcChildA = [];
const childMcMapB = {};
const noMcChildB = [];
childA.forEach(f => {
if (f.mc) {
childMcMapA[f.mc] = f;
} else {
noMcChildA.push(f);
}
});
childB.forEach(f => {
if (f.mc) {
childMcMapB[f.mc] = f;
} else {
noMcChildB.push(f);
}
});
const allChildMcs = new Set([...Object.keys(childMcMapA), ...Object.keys(childMcMapB)]);
const mergedChilds = [];
allChildMcs.forEach(name => {
const childItemA = childMcMapA[name];
const childItemB = childMcMapB[name];
const mergedChild = {};
const allKeys = new Set([...Object.keys(childItemA || {}), ...Object.keys(childItemB || {})]);
allKeys.forEach(key => {
mergedChild[key] = (childItemA && childItemA[key])? childItemA[key] : (childItemB && childItemB[key])? childItemB[key] : null;
});
mergedChilds.push(mergedChild);
});
mergedChilds.push(...noMcChildA,...noMcChildB);
return mergedChilds;
},
// 合并对接当事人和要素当事人数据
mergeDatasets (datasetA, datasetB) {
const mcMapA = {};
const noMcA = [];
const mcMapB = {};
const noMcB = [];
datasetA.forEach(item => {
if (item.mc) {
mcMapA[item.mc] = item;
} else {
noMcA.push(item);
}
});
datasetB.forEach(item => {
if (item.mc) {
mcMapB[item.mc] = item;
} else {
noMcB.push(item);
}
});
const allMcs = new Set([...Object.keys(mcMapA), ...Object.keys(mcMapB)]);
const mergedDataset = [];
allMcs.forEach(name => {
const itemA = mcMapA[name];
const itemB = mcMapB[name];
const mergedItem = {};
const allKeys = new Set([...Object.keys(itemA || {}), ...Object.keys(itemB || {})]);
allKeys.forEach(key => {
if (key === 'children') {
mergedItem[key] = this.mergeChildData(itemA?.children || [], itemB?.children || []);
} else {
mergedItem[key] = (itemA && itemA[key])? itemA[key] : (itemB && itemB[key])? itemB[key] : null;
}
});
mergedDataset.push(mergedItem);
});
mergedDataset.push(...noMcA,...noMcB);
return mergedDataset;
},
使用
const list1 = {
"中国人": [
{
"mc": "张三",
"xb": "",
"gj": "中国",
"children": [
{
"mc": "李四",
"xb": "女",
"gj": ""
}
]
}
]
}
const list2 = {
"中国人": [
{
"mc": "张三",
"xb": "男",
"gj": "",
"children": [
{
"mc": "李四",
"xb": "",
"gj": "中国"
}
]
}
]
}
this.lastDataInfo(list1, list2);
输出
{
"中国人": [
{
"mc": "张三",
"xb": "男",
"gj": "中国",
"children": [
{
"mc": "李四",
"xb": "女",
"gj": "中国"
}
]
}
]
}
JavaScript合并两组对象数组有值数据
533

被折叠的 条评论
为什么被折叠?



