Let’s suppose I have an API response that looks like this:
JavaScript
x
10
10
1
const data = {
2
users: [
3
{ name: "John", teams: [{ name: "Liverpool" }] },
4
{ name: "Sam", teams: [{ name: "MC" }, { name: "United" }] },
5
],
6
photos: [
7
{ id: "123", types: ["JPG", "PNG"], comments: [{ description: "sample photo" }] },
8
],
9
};
10
I want to transform it by adding the rid
property to each object.
JavaScript
1
11
11
1
const data = {
2
rid: "ABC",
3
users: [
4
{ rid: "ABC", name: "John", teams: [{ rid: "ABC", name: "Liverpool" }] },
5
{ rid: "ABC", name: "Sam", teams: [{ rid: "ABC", name: "MC" }, { rid: "ABC", name: "United" }] },
6
],
7
photos: [
8
{ rid: "ABC", id: "123", types: ["JPG", "PNG"], comments: [{ rid: "ABC", description: "sample photo" }] },
9
],
10
};
11
How can I do so? I think there is some kind of recursion involved but I haven’t been able to draft a solution?
Thanks.
Advertisement
Answer
You just need to iterate through object with recursive function.
Try below snippet.
JavaScript
1
20
20
1
const data = {
2
users: [
3
{ name: 'John', teams: [{ name: 'Liverpool' }] },
4
{ name: 'Sam', teams: [{ name: 'MC' }, { name: 'United' }] },
5
],
6
photos: [
7
{ id: '123', types: ['JPG', 'PNG'], comments: [{ description: 'sample photo' }] },
8
{ key: null }, // Fixed null values
9
],
10
}
11
12
function addProperty(obj, key, val) {
13
if (!obj || typeof obj !== 'object') return
14
if (!Array.isArray(obj)) obj[key] = val
15
Object.values(obj).forEach((obj) => addProperty(obj, key, val))
16
}
17
18
addProperty(data, 'rid', 'ABC')
19
20
console.log(data)