Reputation: 1550
I have large number of objects in myArray (300+). each object under user I have more objects about 10 each.
I want to return objects containing specific user.id (e.g. user.id = 17)
I can do this with a for loop within for loop. However because of the size of data set... browser crashes... I wonder what would be the best way of doing this?
var myArray = [{
id: "453453",
user: [{
id: "17",
name: "sdfsd"
}, {
id: "45",
name: "dfsdf"
}, {
id: "46",
name: "sdfsd"
}]
}, {
id: "547645",
user: [{
id: "17",
name: "sdfsd"
}, {
id: "35",
name: "dfsdf"
}, {
id: "48",
name: "sdf"
}]
}, {
id: "564654",
user: [{
id: "5",
name: "sdfsd"
}, {
id: "48",
name: "fthf"
}, {
id: "35",
name: "sdfsdf"
}]
}];
// my Solution
var siteIDs = [];
var userId = '17';
for (var i = 0; i < myArray.length; i++) {
var user = myArray[i].user;
for (var r = 0; r < user.length; r++) {
var someId = user[r].id;
if (someId == userId) {
siteIDs.push(myArray[i]);
}
var someId = null;
}
}
console.log(siteIDs);
Upvotes: 0
Views: 51
Reputation: 1238
I think you want to push myArray[i]
instead of myArray[r]
var groups, siteIDs, value, userGroup;
groups = [
{
id: "453453",
user: [
{
id: "17",
name: "sdfsd"
},
{
id: "45",
name: "dfsdf"
},
{
id: "46",
name: "sdfsd"
}
]
},
{
id: "547645",
user: [
{
id: "17",
name: "sdfsd"
},
{
id: "35",
name: "dfsdf"
},
{
id: "48",
name: "sdf"
}
]
},
{
id: "564654",
user: [
{
id: "5",
name: "sdfsd"
},
{
id: "48",
name: "fthf"
},
{
id: "35",
name: "sdfsdf"
}
]
}
];
siteIDs = [];
value = '17';
groups.forEach(function(group) {
userGroup = group.user;
userGroup.forEach(function(user) {
if (user.id === value) {
siteIDs.push(group);
}
});
});
userGroup = null;
console.log(siteIDs);
Upvotes: 2