I am working with graphql returned data that looks like this:
"userRelations": [ {"relatedUser": {"id": 4,"firstName": "Jack","lastName": "Miller" },"type": "FRIEND" }, {"relatedUser": {"id": 3,"firstName": "Rhena","lastName": "Tahoma" },"type": "CONTACT" } ]
I had to separate all those items which had the type: "FRIENDS"
. I did this and it worked perfectly:
var friendArray = new Array(); for (let i in data.users.nodes[0].userRelations) { if (data.users.nodes[0].userRelations[i].type == "FRIEND") { friendArray.push(data.users.nodes[0].userRelations[i]); } }
However, I read that using for loops and for in is not a good idea. Is there any other way to iterate and check all the objects without for loops? I tried using this but it doesn't give the correct results:
data.users.nodes[0].userRelations.forEach((object: Object)=> { if (data.users.nodes[0].userRelations.type == "FRIEND") { friendArray.push(data.users.nodes[0].userRelations.object); }})
The friendsArray remains empty. What am I missing out?
Edit: After filtering the friends data, I want to render some items by mapping. I was trying to do something like this:
data.users.nodes[0].userRelations.map()
data.users.nodes[0].userRelations.filter(({ type }) => type === 'FRIEND').map(/*code*/)
but this gave me an error that:
Binding element 'type' implicitly has an 'any' type.ts(7031)