操作两个对象数组创建新数组并更新 object1 的属性并添加新数组



嗨,我正在尝试比较两个对象数组,并希望通过操作它来实现对象的自定义数组。

我想通过每次删除 object1 中的任何内容时检查来实现这样的事情? 如果将其删除,则应将属性更改为"Y"。

object 1 = [
{
"label":"a",
"removed":"N",
"value":1
},
{
"label":"b",
"removed":"N",
"value":2
}
]
object 2 =[
{
"label":"a",
"removed":"N",
"value":1
},
{
"label":"c",
"removed":"N",
"value":3
}
]

结果应为 =

[{
label:"a",
removed:"N",
value:1
},{
label:"b",
removed:"Y",
value:2
},{
label:"c",
removed:"N",
value:3
}]

我试图循环两个数组并试图实现相同的目标,但它不知何故不起作用。

我尝试了以下代码。

let data = []
object1.forEach((item1) => {
object2.forEach((item2) => {
if (item1.value === item2.value) {
data.push(Object.assign(item1));
} else {
item2.removeFlag = 'Y';
data.push(Object.assign(item1, item2));
}
}
}

。更新的问题.....

obj1 = [
{
"val":"type1",
"removed":"N",
"data":[
{
"label":"type1-a",
"removed":"N",
"dataid":16
},
{
"label":"type1-b",
"removed":"N",
"dataid":26
}
]
},
{
"val":"type2",
"removed":"N",
"data":[
{
"label":"type2-a",
"removed":"N",
"dataid":12
},
{
"label":"type2-b",
"removed":"N",
"dataid":34
}
]
},
{
"val":"type3",
"removed":"N",
"id":124,
"label":"type3-label1"
},
{
"val":"type4",
"removed":"N",
"id":126,
"label":"type4-label1"
},
{
"val":"type4",
"removed":"N",
"id":128,
"label":"type4-label2"
}
]
obj2 = [
{
"val":"type1",
"removed":"N",
"data":[
{
"label":"type1-a",
"removed":"N",
"dataid":16
},
{
"label":"type1-c",
"removed":null,
"dataid":null
},
{
"label":"type1-d",
"removed":null,
"dataid":null
}
]
},
{
"val":"type3",
"removed":"N",
"id":124,
"label":"type3-label1"
},
{
"val":"type4",
"removed":"N",
"id":126,
"label":"type4-label1"
},
{
"val":"type4",
"removed":null,
"id":null,
"label":"type4-label3"
}
]
result = [
{
"val":"type1",
"removed":"N",
"data":[
{
"label":"type1-a",
"removed":"N",
"dataid":16
},
{
"label":"type1-b",
"removed":"Y",
"dataid":26
},
{
"label":"type1-c",
"removed":null,
"dataid":null
},
{
"label":"type1-d",
"removed":null,
"dataid":null
}
]
},
{
"val":"type2",
"removed":"Y",
"data":[
{
"label":"type2-a",
"removed":"N",
"dataid":12
},
{
"label":"type2-b",
"removed":"N",
"dataid":34
}
]
},
{
"val":"type3",
"removed":"N",
"id":124,
"label":"type3-label1"
},
{
"val":"type4",
"removed":"N",
"id":126,
"label":"type4-label1"
},
{
"val":"type4",
"removed":"Y",
"id":128,
"label":"type4-label2"
},
{
"val":"type4",
"removed":null,
"id":null,
"label":"type4-label3"
}
]

const object1 = [{
"label": "a",
"removed": "N",
"value": 1
},
{
"label": "b",
"removed": "N",
"value": 2
}
]
const object2 = [{
"label": "a",
"removed": "N",
"value": 1
},
{
"label": "c",
"removed": "N",
"value": 3
}
]
const result = [...object2.map(record => {
const record2 = object1.find(pr => pr.label === record.label) || {};
return {
...record,
...record2
}
}), ...object1.filter(pr => !object2.some(npr => npr.label === pr.label)).map(pr => ({ ...pr,
removed: "Y"
}))]
console.log(result);

--编辑

对于嵌套数据,您必须在函数内重复相同的代码reduce


const result = [...object2.map(record => {
const record2 = object1.find(pr => pr.val === record.val) || {};
const data = [...(record.data || []).map(pr => ({ ...pr,
...(record2.data.find(npr => npr.label === pr.label) || {})
})),
...(record2.data || []).filter(pr => !record.data.some(npr => npr.label === pr.label)).map(pr => ({ ...pr,
removed: 'Y'
}))
]
return {
...record,
...record2,
data
}
}), ...object1.filter(pr => !object2.some(npr => npr.val === pr.val)).map(pr => ({ ...pr,
removed: "Y"
}))]

最新更新