I recently ran into an issue where I needed to filter out some items in a nested array inside an object of arrays in JavaScript. After trial and error, I found out how to extract the information that I needed.
Suppose we have an object of arrays which has users and the sporting equipment that they have borrowed. Here is our data object:
const data = {
users: [
{
"id": "123",
"name": "John Smith",
"items": [
{
"id": 1,
"name": "Soccer ball",
}
]
},
{
"id": "456",
"name": "Steve Johnson",
"items": [
{
"id": 2,
"name": "Basketball",
}
]
},
{
"id": "789",
"name": "Leslie Thompson",
"items": [
{
"id": 3,
"name": "Football",
}
]
}
]
};
Let’s say we want to find out who borrowed the basketball. We first start by using the filter
function in order to filter out the data that we want:
const output = data.users.filter(x => x.items.every(y => y.name.includes("Basketball")));
We use two functions in addition to filter
. First, we use the every
function. The every
function is used to test whether the parameters that you pass inside it exist. It returns a boolean. The includes
function searches inside an array to see whether the value that you are looking for exists.
If we console.log(output)
we get the following:
(1) [Object]
0: Object
id: "456"
name: "Steve Johnson"
items: Array(1)
0: Object
id: 2
name: "Basketball"