-1
votes

Comment obtenir des objets du tableau imbriqué dans un autre objet dans la matrice avec ES6

J'ai des données avec la structure suivante: xxx

de tous ces tableaux "Device_Groups" et des tableaux de "périphériques", je dois obtenir un seul éventail d'objets où "actif" est vrai (1).

Comment faire la manière ES6 +?


3 commentaires

Qu'est-ce que tu as essayé jusque-là?


@Andreas a essayé d'utiliser la carte et filtrer, mais s'est perdue quelque part au milieu. J'ai essayé de le faire étape par étape mais d'une manière ou d'une autre avoir un tableau de tableaux ...


Veuillez ajouter votre approche et nous vous aiderons à le réparer. Il n'y a donc pas un "j'ai besoin ... s'il vous plaît donnez-moi une solution" service.


5 Réponses :


1
votes

Vous pouvez utiliser Carte code> et Filtre Code> comme ceci:

p>

var DATA={'device_groups':[{'id':'1','name':'group 1','devices':[{'id':11,'name':'device 11','active':1},{'id':12,'name':'device 12','active':0},{'id':13,'name':'device 13','active':0}]},{'id':'2','name':'group 2','devices':[{'id':21,'name':'device 21','active':1},{'id':22,'name':'device 22','active':0},{'id':23,'name':'device 23','active':1}]},{'id':'3','name':'group 3','devices':[{'id':31,'name':'device 31','active':1},{'id':32,'name':'device 32','active':0},{'id':33,'name':'device 33','active':1}]}]}

const devices = DATA.device_groups
                  .reduce((a,d) => a.concat(d.devices.filter(f => f.active)),[]);

console.log(devices)


1 commentaires

Merci! On dirait ce dont j'avais besoin et Waaay plus efficace que ce que j'ai essayé de faire ...



0
votes

Vous pouvez le faire en utilisant Réduire et Filtre .

Par filtre Nous tirons uniquement les éléments de périphériques code> qui ont l'état actif code> et que nous les concactions dans sortie finale code> P>

var DATA={'device_groups':[{'id':'1','name':'group 1','devices':[{'id':11,'name':'device 11','active':1},{'id':12,'name':'device 12','active':0},{'id':13,'name':'device 13','active':0}]},{'id':'2','name':'group 2','devices':[{'id':21,'name':'device 21','active':1},{'id':22,'name':'device 22','active':0},{'id':23,'name':'device 23','active':1}]},{'id':'3','name':'group 3','devices':[{'id':31,'name':'device 31','active':1},{'id':32,'name':'device 32','active':0},{'id':33,'name':'device 33','active':1}]}]}

let output = DATA.device_groups.reduce((op,cur)=>{
  let temp = cur.devices.filter(ele=> ele.active)
  op = op.concat(temp)
  return op;
},[])

console.log(output)


2 commentaires

Vous devriez expliquer ce que vous avez fait sinon ceci est juste un code-décharge.


@Andy sûr. était en train d'ajouter une explication à la réponse.



0
votes

Fondamentalement, vous pouvez utiliser réduire code> et filtre code> pour réaliser ce que vous voulez

p>

var DATA = {
  'device_groups': [{
    'id': '1',
    'name': 'group 1',
    'devices': [{
      'id': 11,
      'name': 'device 11',
      'active': 1
    }, {
      'id': 12,
      'name': 'device 12',
      'active': 0
    }, {
      'id': 13,
      'name': 'device 13',
      'active': 0
    }]
  }, {
    'id': '2',
    'name': 'group 2',
    'devices': [{
      'id': 21,
      'name': 'device 21',
      'active': 1
    }, {
      'id': 22,
      'name': 'device 22',
      'active': 0
    }, {
      'id': 23,
      'name': 'device 23',
      'active': 1
    }]
  }, {
    'id': '3',
    'name': 'group 3',
    'devices': [{
      'id': 31,
      'name': 'device 31',
      'active': 1
    }, {
      'id': 32,
      'name': 'device 32',
      'active': 0
    }, {
      'id': 33,
      'name': 'device 33',
      'active': 1
    }]
  }]
};
const deviceGroups = DATA.device_groups;

const solution = deviceGroups.reduce((result, devicegroup) => {
  const filteredDevices = devicegroup.devices.filter(device => device.active === 1)
  return [...result, ...filteredDevices]
}, [])

console.log(solution)


0 commentaires

0
votes

Utilisation Réduire CODE> Fusionner la matrice intérieure des périphériques code> à partir de chaque périphérique_groups code> dans un tableau d'appareils code>. Ensuite, filtrez le tableau fusionné avec actif === 1 code> pour obtenir un seul tableau de périphériques actifs.

p>

var DATA = {"device_groups":[{"id":"1","name":"group 1","devices":[{"id":11,"name":"device 11","active":1},{"id":12,"name":"device 12","active":0},{"id":13,"name":"device 13","active":0}]},{"id":"2","name":"group 2","devices":[{"id":21,"name":"device 21","active":1},{"id":22,"name":"device 22","active":0},{"id":23,"name":"device 23","active":1}]},{"id":"3","name":"group 3","devices":[{"id":31,"name":"device 31","active":1},{"id":32,"name":"device 32","active":0},{"id":33,"name":"device 33","active":1}]}]};

var devices = DATA.device_groups
                  .reduce((acc, ele) => {
                     acc = acc.concat([...ele['devices']]); //merging each device array with the next with the concat().
                     return acc;
                   },[])
                  .filter((data) => data['active'] === 1);
console.log(devices);


0 commentaires

0
votes

Vous pouvez utiliser juste foreach code> et diffuser ... code> Opérateur et appuyez sur les résultats filtrés où actif code> propriété est vrai, dans le tableau final

p>

var DATA = {'device_groups': [{'id': '1','name': 'group 1','devices': [{'id': 11,'name': 'device 11','active': 1}, {'id': 12,'name': 'device 12','active': 0}, {'id': 13,'name': 'device 13','active': 0}] }, {'id': '2','name': 'group 2','devices': [{'id': 21,'name': 'device 21','active': 1}, {'id': 22,'name': 'device 22','active': 0}, {'id': 23,'name': 'device 23','active': 1
  }]}, {'id': '3','name': 'group 3','devices': [{'id': 31,'name': 'device 31','active': 1}, {'id': 32,'name': 'device 32','active': 0}, {'id': 33,'name': 'device 33','active': 1}]}]};

const result =[];
DATA.device_groups.forEach(devGroup => result.push(...devGroup.devices.filter(d => d.active)));
console.log(result);


0 commentaires