Reputation: 423
I have two arrays with dynamic values, where i need to compare arrayA1-> KEY with arrayA2-> ID and nestedArray --> ID, assign the values of arrayA1 to nested array of arrayA2, and return the array in same format as arrayA2.
here in arrayA1 of each objects last key needs to assign or compare with arrayA2 -> ID, and remaining values needs to assgin to the nestedArray of arrayA2 of the respective object of arrayA1, where in nestedArray if the ID matches with arrayA1 key then assign the value of arrayA1 to the nestedArray "isVerificationMet".
Below is the arrayA1:
arrayA1 = [{
13928: false,
13932: true,
13935: true,
13995: false,
},
{
13927: true,
14024: false,
},
{
13906: false,
13935: true,
13928: true,
14029: false,
}
]
here is the arrayA2:-
arrayA2 = [{
id: 13995,
nestedArray: [{
id: 13928,
isVerificationMet: false
},
{
id: 13932,
isVerificationMet: false
},
{
id: 13935,
isVerificationMet: false
},
]
},
{
id: 14024,
nestedArray: [{
id: 13927,
isVerificationMet: false
}, ]
},
{
id: 14029,
nestedArray: [{
id: 13906,
isVerificationMet: false
},
{
id: 13935,
isVerificationMet: false
},
{
id: 13928,
isVerificationMet: false
},
]
}
]
Here is the final o/p of the arrayA2(result).
result = [{
id: 13995,
nestedArray: [{
id: 13928,
isVerificationMet: false
},
{
id: 13932,
isVerificationMet: true
},
{
id: 13935,
isVerificationMet: true
},
]
},
{
id: 14024,
nestedArray: [{
id: 13927,
isVerificationMet: true
}, ]
},
{
id: 14029,
nestedArray: [{
id: 13906,
isVerificationMet: false
},
{
id: 13935,
isVerificationMet: true
},
{
id: 13928,
isVerificationMet: true
},
]
}
]
}
here is the logic i am trying and its not working,
const docDetails = arrayA2.map((item, i) => {
const A2 = Object.assign({}, item);
const keys = Object.keys(arrayA1[i]);
keys.forEach(key => {
if (A2.id == parseInt(key)) {
A2.id = parseInt(key)
}
const fieldList1 = item.nestedArray.filter(elem => {
const A1 = Object.assign({}, elem);
if (parseInt(key) == A1.id) {
A1.isVerificationMet = arrayA1[i][key];
}
return A1;
});
return (A2.fieldList = fieldList1);
});
})
the above logic is becoming clumsy and i tried with all other way its looping many times and not assigning correct value.
Here i used the object.assign as the arrayA2 is readonly.
Upvotes: 3
Views: 1194
Reputation: 386560
You could find the object with the values and map new objects.
const
arrayA1 = [{ 13928: false, 13932: true, 13935: true, 13995: false }, { 13927: true, 14024: false }, { 13906: false, 13935: true, 13928: true, 14029: false }],
arrayA2 = [{ id: 13995, nestedArray: [{ id: 13928, isVerificationMet: false }, { id: 13932, isVerificationMet: false }, { id: 13935, isVerificationMet: false }] }, { id: 14024, nestedArray: [{ id: 13927, isVerificationMet: false }] }, { id: 14029, nestedArray: [{ id: 13906, isVerificationMet: false }, { id: 13935, isVerificationMet: false }, { id: 13928, isVerificationMet: false }] }],
result = arrayA2.map(({ id, nestedArray }) => ({
id,
nestedArray: nestedArray.map(o => ({
...o, isVerificationMet: arrayA1.find(q => id in q)?.[o.id]
}))
}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 2