I have an array of object which consists some id's as a key.
const sampleObj1 = {0011:[{},{}], 0022:[{}, {}], 0033:[{},{}]}
const sampleObj2 = [{id:0011, name:'test1'}, {id:0022, name:'test2'}, {id:0033, name:'test3'}]
I want to compare sampleObj1 key with the sampleObj2 id value and then need to create new obj some like below.
const newObjByComparing = {test1:[{},{}], test2:[{},{}], test3:[{},{}]} //desired result
I have tried using for loop but not able to get the desired compared value.
const fromRdx = sampleObj2;
const fromApi = sampleObj1;
const keys = Object.keys(fromApi);
const newObjAfterComparision = {};
for (let i in fromRdx) {
newObjAfterComparision[fromRdx[i]] = fromApi[keys[i]];
fromApi[fromRdx[i]] = fromApi[keys[i]];
delete fromApi[keys[i]];
}
console.log(newObjAfterComparision)
CodePudding user response:
The below may be one possible solution to achieve the desired objective:
Code Snippet
const transformObj = (obj, arr) => arr.reduce((f, i) => ({
...f,
[i.name]: obj[i.id]
}), {});
const sampleObj = {
"0011": [{}, {}],
"0022": [{}, {}],
"0033": [{}, {}]
};
const sampleArr = [{
id: "0011",
name: "test1"
}, {
id: "0022",
name: "test2"
}, {
id: "0033",
name: "test3"
}];
console.log(transformObj(sampleObj, sampleArr));
Expalanation
- Use
.reduce()
to iterate over thesampleArr
- For each element populate a result obj (named
f
) - The key of the object will be the element's
name
and value will be the value from thesampleObj
(where key is element'sid
)
CodePudding user response:
Another approach using map
and Object.fromEntries
const sampleObj1 = {'0011':[{},{}], '0022':[{}, {}], '0033':[{},{}]}
const sampleObj2 = [{id:'0011', name:'test1'}, {id:'0022', name:'test2'}, {id:'0033', name:'test3'}]
let y = Object.fromEntries(sampleObj2.map(({id,name}) => [name,sampleObj1[id]]))
console.log(y)