0

This Object:

var Betreiber = {
      "user1": [
        {
          "desc": "60",
          "Id": 3473631702,
          "Status": "offline"
        },
        {
          "desc": "61",
          "Id": 3473631703,
          "Status": "offline"
        }

      ],
      "user2": [
        {
          "desc": "62",
          "Id": 963346121,
          "Status": "offline"
        },
        {
          "desc": "63", 
          "Id": 963346122,      
          "Status": "offline"  
        }
      ],
      "user3": [
        {
          "desc": "64",
          "Id": 972878784
        },
        {
          "desc": "65",
          "Id": 3473631706,
          "Status": "offline"
        }
      ]
  }

My code:

 var anlagen = [963346121, 963346122]; 

 for(var users in Betreiber) {
   for(var k=0;k<anlagen.length; k++) {
   for(var ids in Betreiber[users]) {
       if(anlagen[k] != Betreiber[users][ids].Id ){
         delete Betreiber[users][ids];
       }
     }
   }
   if(Betreiber[users].length === 0) {
     delete Betreiber[users];
   }
 }

i want to splice / delete every Element that doesn't fit my anlagen Array. For some reason, the Elements are removed, but not completely deleted.

For Example: If i only want to keep the values of user1:

State: user1: [ , ], user2: [ , ], user3: [ , ]

Desired: user1: [data....]

If the user.length is 0, i wan't to delete the whole user.

David
  • 957
  • 9
  • 22
  • i already tried, splice and delete methods... i can't get it to work due to the for loop. – David Dec 11 '17 at 11:08
  • why don't you just [filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) and get the items you want to keep? – Thomas Dec 11 '17 at 11:11

2 Answers2

1

I think this is what you want:

var Betreiber = {
  "user1": [{
      "desc": "60",
      "Id": 3473631702,
      "Status": "offline"
    },
    {
      "desc": "61",
      "Id": 3473631703,
      "Status": "offline"
    }

  ],
  "user2": [{
      "desc": "62",
      "Id": 963346121,
      "Status": "offline"
    },
    {
      "desc": "63",
      "Id": 963346122,
      "Status": "offline"
    }
  ],
  "user3": [{
      "desc": "64",
      "Id": 972878784
    },
    {
      "desc": "65",
      "Id": 3473631706,
      "Status": "offline"
    }
  ]
};

var anlagen = [963346121, 963346122];

Object.keys(Betreiber).forEach(key => {
  Betreiber[key] = Betreiber[key].filter(item => {
    return anlagen.indexOf(item.Id) !== -1;
  });
  
  if(!Betreiber[key].length) {
    delete Betreiber[key];
  }
});

console.log(Betreiber);

You can just filter the element out which don't meet your criteria using Array#filter. And if the resultant array is of length 0, you can delete its key from the object.

31piy
  • 21,164
  • 6
  • 40
  • 57
1
var anlagen = [963346121, 963346122]; 

for(var user in Betreiber) {
  for (var k = 0, len = anlagen.length; k < len; k++) {
   for (var j = 0, _len = Betreiber[user].length; j < _len; j++) {
     if (anlagen[k] != Betreiber[user][j].Id ) { 
       Betreiber[user].splice(j, 1);
     }
   }
  }
  if (Betreiber[user].length === 0) {
    delete Betreiber[user];
  }
}
Raj Kumar N
  • 584
  • 4
  • 16