MonteCristo
MonteCristo

Reputation: 1550

Find by value in nested array of objects in array of objects - large dataset

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?

http://jsfiddle.net/vtrnn6z9/

 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

Answers (1)

Lesha Ogonkov
Lesha Ogonkov

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

Related Questions