Try to convert the following object (which was getting from an API response) to an array object.
const oldObj = {
Georgia : {
notes: "lorem ipsum",
lat: "32.1656",
long: "82.9001"
},
Alabama : {
notes: "lorem ipsum",
lat: "32.3182",
long: "86.9023"
}
}
My expected like bellow:
const desireArray = [
{
name: "Georgia",
notes: "lorem ipsum",
lat: "32.1656",
long: "82.9001"
},
{
name: "Alabama",
notes: "lorem ipsum",
lat: "32.3182",
long: "86.9023"
}
];
Try to do with forEach but, I think it's not the way, seemed returned me the error.
oldObj.forEach((el, i) => {
console.log(el);
});
TypeError: oldObj.forEach is not a function
Any help?
Andreas
21.9k7 gold badges52 silver badges58 bronze badges
asked Oct 19, 2020 at 10:38
Daniel Smith
1,7744 gold badges31 silver badges64 bronze badges
4 Answers 4
forEach is method for array, meanwhile your oldObj is object
First you have to transform it to array, here we could do is transforming object to array of key-values pairs
And using with map could make code shorter
const oldObj = {
Georgia: {
notes: "lorem ipsum",
lat: "32.1656",
long: "82.9001",
},
Alabama: {
notes: "lorem ipsum",
lat: "32.3182",
long: "86.9023",
},
}
const res = Object.entries(oldObj).map(([name, obj]) => ({ name, ...obj }))
console.log(res)
References
answered Oct 19, 2020 at 10:41
hgb123
14.9k3 gold badges24 silver badges43 bronze badges
Sign up to request clarification or add additional context in comments.
1 Comment
Andreas
- Find the entries using
Object.entries - Reduce by
destructuringthe current object by adding the key into the accumulator - Push into the result array
const oldObj = {
Georgia : {
notes: "lorem ipsum",
lat: "32.1656",
long: "82.9001"
},
Alabama : {
notes: "lorem ipsum",
lat: "32.3182",
long: "86.9023"
}
};
const result = Object.entries(oldObj).reduce((acc, curr) => {
const [key, val] = curr;
acc.push({
name: key,
...val
});
return acc;
}, []);
console.log(result);
answered Oct 19, 2020 at 10:56
Kunal Mukherjee
5,8733 gold badges29 silver badges55 bronze badges
Comments
const oldObj = {
Georgia : {
notes: "lorem ipsum",
lat: "32.1656",
long: "82.9001"
},
Alabama : {
notes: "lorem ipsum",
lat: "32.3182",
long: "86.9023"
}
}
const desireArray = Object.keys(oldObj).map((key) => ({ name: key, ...oldObj[key] }));
Explain it
const keys = Object.keys(oldObj);
const desireArray = keys.map((key) => {
return {
name: key,
notes: oldObj[key].notes,
lat: oldObj[key].lat,
long: oldObj[key].long
}
});
answered Apr 20, 2022 at 16:03
Saif Uddin
1972 silver badges6 bronze badges
Comments
const oldObj = {
Georgia : {
notes: "lorem ipsum",
lat: "32.1656",
long: "82.9001"
},
Alabama : {
notes: "lorem ipsum",
lat: "32.3182",
long: "86.9023"
}
};
function convertObjToArr(obj) {
let result = [];
for(let key in obj) {
result.push({name: key, ...obj[key]});
}
return result;
}
console.log(convertObjToArr(oldObj));
or try other simple solution
return Object.keys(obj).map(item => ( {name: item, ...obj[item]} ));
answered Oct 19, 2020 at 11:01
samo0ha
3,8462 gold badges28 silver badges29 bronze badges
Comments
lang-js