I have two objects as below:
var1 = {
"ELEMENT1": [1110,1111],
"ELEMENT2": ["909"],
"ELEMENT3": ["910"]
}
var2 = {
"ELEMENT3": [
{
"ID":910,
"NAME":"ELEMENT3",
"DETAILS":"CURRENT"
},
{
"ID":912,
"NAME":"ELEMENT3",
"DETAILS":"FUTURE"
}
],
"ELEMENT2":[
{
"ID":909,
"NAME": "ELEMENT2",
"DETAILS":"OUTAGE"
},
{
"ID": 910,
"NAME": "ELEMENT2",
"DETAILS":"OUTAGE"
}
],
"ELEMENT1":[
{
"ID": 1110,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
},
{
"ID": 1111,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
},
{
"ID": 1112,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
},
{
"ID": 1113,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
}]
}
I am trying to creating 3rd object after comparing var1 and var2. 3rd object should contain only those ID which are present in var1.
3rd Object should look as below :
{
"ELEMENT3": [
{
"ID":910,
"NAME":"ELEMENT3",
"DETAILS":"CURRENT"
}
],
"ELEMENT2":[
{
"ID":909,
"NAME": "ELEMENT2",
"DETAILS":"OUTAGE"
}
],
"ELEMENT1":[
{
"ID": 1110,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
},
{
"ID": 1111,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
}
]
}
This should do it:
var var1 = {
"ELEMENT1": ["1110","1111"],
"ELEMENT2": ["909"],
"ELEMENT3": ["910"]
}
var var2 = {
"ELEMENT3": [
{
"ID":910,
"NAME":"ELEMENT3",
"DETAILS":"CURRENT"
},
{
"ID":912,
"NAME":"ELEMENT3",
"DETAILS":"FUTURE"
}
],
"ELEMENT2":[
{
"ID":909,
"NAME": "ELEMENT2",
"DETAILS":"OUTAGE"
},
{
"ID": 910,
"NAME": "ELEMENT2",
"DETAILS":"OUTAGE"
}
],
"ELEMENT1":[
{
"ID": 1110,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
},
{
"ID": 1111,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
},
{
"ID": 1112,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
},
{
"ID": 1113,
"NAME": "WORK_PACKAGE",
"DETAILS": "INLINE"
}]
}
var obj = {};
Object.keys(var2).forEach((item) => {
var2[item].forEach((subItem) => {
if(var1[item].indexOf(`${subItem.ID}`) > -1) {
obj[item] = [...(obj[item] ?? []), subItem]
}
})
});
console.log(obj);
You could loop through var2 and filter the IDs which var1 includes and assign filtered props to a new object:
let var1 = {
ELEMENT1: [1110, 1111],
ELEMENT2: [909],
ELEMENT3: [910],
}
let var2 = {
ELEMENT3: [
{ ID: 910, NAME: 'ELEMENT3', DETAILS: 'CURRENT' },
{ ID: 912, NAME: 'ELEMENT3', DETAILS: 'FUTURE' },
],
ELEMENT2: [
{ ID: 909, NAME: 'ELEMENT2', DETAILS: 'OUTAGE' },
{ ID: 910, NAME: 'ELEMENT2', DETAILS: 'OUTAGE' },
],
ELEMENT1: [
{ ID: 1110, NAME: 'WORK_PACKAGE', DETAILS: 'INLINE' },
{ ID: 1111, NAME: 'WORK_PACKAGE', DETAILS: 'INLINE' },
{ ID: 1112, NAME: 'WORK_PACKAGE', DETAILS: 'INLINE' },
{ ID: 1113, NAME: 'WORK_PACKAGE', DETAILS: 'INLINE' },
],
}
const result = {}
for (let key in var2) {
result[key] = var2[key].filter(o => var1[key]?.includes(o.ID))
}
console.log(JSON.stringify(result, null, 2))