J'ai des données avec la structure suivante: 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). P> Comment faire la manière ES6 +? P> P>
5 Réponses :
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)
Merci! On dirait ce dont j'avais besoin et Waaay plus efficace que ce que j'ai essayé de faire ...
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)
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.
Fondamentalement, vous pouvez utiliser p> réduire code> et
filtre code> pour réaliser ce que vous voulez
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)
Utilisation p> 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.
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);
Vous pouvez utiliser juste p> 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
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);
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.