Je reçois ce JSON de mon API, j'essaie de le transformer en format utilisable pour mon formulaire (ce sera une liste avec la case à cocher) le format im Essayer de le transformer en est le ci-dessous P> let TempArray = Object.keys(res.data);
TempArray.reduce(function(concreteCylinderArray, sampleDateTime, sampleUUID, mouldNumber) {
// now access this values from apiResponse and start setting them as the argument variables I have wrote
const sampleObject = { concreteCylinderArray, sampleDateTime, sampleUUID, mouldNumber };
return [].push(sampleObject);
}, []);
3 Réponses :
Que diriez-vous d'utiliser des p> pour Acheach code> comme suit.
function convertFormat(input) {
var output = [];
input['concrete_samples'].forEach(sample => {
Object.keys(sample['sample_specimens']).forEach(key => {
sample['sample_specimens'][key].forEach(specimen => {
output.push({
"type": key,
"sample_datetime": sample['sample_datetime'],
"sample_uuid": specimen['sample_uuid'],
"mould_number": specimen['mould_number']
});
});
});
});
return output;
}
var input = {
"uuid": "daff25b9-1efa-4c25-904f-7bf08bf22ce6",
"concrete_samples": [
{
"uuid": "bb5d9b79-9e6b-4c21-9c1c-4771ce06e433",
"sample_datetime": "2019-10-03T12:11:00+10:00",
"sample_specimens": {
"concrete_compressive_cylinder_100": [
{
"uuid": "4a730dd7-7bdb-4671-9b28-9b107759f4c8",
"sample_uuid": "bb5d9b79-9e6b-4c21-9c1c-4771ce06e433",
"mould_number": "321"
},
{
"uuid": "205e31dd-637e-4588-bfbe-25093ff2c0cc",
"sample_uuid": "bb5d9b79-9e6b-4c21-9c1c-4771ce06e433",
"mould_number": "322"
},
{
"uuid": "c9f975a9-b152-4711-b103-bda63e6e9d0b",
"sample_uuid": "bb5d9b79-9e6b-4c21-9c1c-4771ce06e433",
"mould_number": "323"
},
{
"uuid": "c88940e4-28aa-4e64-b6b9-854a67797a7c",
"sample_uuid": "bb5d9b79-9e6b-4c21-9c1c-4771ce06e433",
"mould_number": "324"
}
]
}
}
]
};
var converted = convertFormat(input);
console.log(converted);
p> Réduire code> sur le
concret_semples CODE> saisir l'heure et le type, puis
Carte CODE> sur les échantillons CODE> SPECIMENS CODE> Retournement de nouveau objets contenant toutes les propriétés pertinentes.
const data = {"uuid":"daff25b9-1efa-4c25-904f-7bf08bf22ce6","concrete_samples":[{"uuid":"bb5d9b79-9e6b-4c21-9c1c-4771ce06e433","sample_datetime":"2019-10-03T12:11:00+10:00","sample_specimens":{"concrete_compressive_cylinder_100":[{"uuid":"4a730dd7-7bdb-4671-9b28-9b107759f4c8","sample_uuid":"bb5d9b79-9e6b-4c21-9c1c-4771ce06e433","mould_number":"321"},{"uuid":"205e31dd-637e-4588-bfbe-25093ff2c0cc","sample_uuid":"bb5d9b79-9e6b-4c21-9c1c-4771ce06e433","mould_number":"322"},{"uuid":"c9f975a9-b152-4711-b103-bda63e6e9d0b","sample_uuid":"bb5d9b79-9e6b-4c21-9c1c-4771ce06e433","mould_number":"323"},{"uuid":"c88940e4-28aa-4e64-b6b9-854a67797a7c","sample_uuid":"bb5d9b79-9e6b-4c21-9c1c-4771ce06e433","mould_number":"324"}]}}]}
const out = data.concrete_samples.reduce((acc, sample) => {
// Destructure the time and specimens array from the current sample
const { sample_datetime, sample_specimens } = sample;
// Use Object.keys to get the type
// (always the first key assuming the data shape doesn't change)
const type = Object.keys(sample_specimens)[0];
// `map` over the specimens array, and combine the time and data
// with the specimen-specific properties
const specimens = sample_specimens[type].map((obj) => {
const { sample_uuid, mould_number } = obj;
return { sample_datetime, type, sample_uuid, mould_number };
});
// Concatenate that array to the accumulator
// and return it
return acc.concat(specimens);
}, []);
console.log(out)
Et s'il existe plusieurs échantillon_specimens code>? Désolé, mais ne pouvait pas comprendre la raison de mettre le premier index [0]
Plusieurs échantillon_specimens code> n'ont pas été spécifiés dans la question @bilalsiddiqui. Re votre deuxième question:
sample_specimens code> est un objet et l'op souhaitait la valeur de "concrete_commesperive_cylinder_100". Et le seul moyen de l'obtenir est de saisir les touches d'objet (un tableau) et de prendre la valeur du premier élément.
Je pense que vous voulez boucler sur Object.Keys (Sample_Specimens) serait préférable de considérer toutes les clés. Pour par exemple, s'il y a un autre tableau avec clé concret_compresperive_cylinder_200 code>
Sauf que n'était pas i> dans les exigences.
hehe, juste !! Mais en tant qu'apprenant, j'aime avoir un code qui fonctionne pour n'importe quel nombre d'arguments / clés. Merci
Je sais, je suis en retard, mais en dehors de la réponse acceptée, cela peut être une solution facile compréhensible.
const result = obj.concrete_samples.reduce((res, { sample_specimens }) => { let tempArray = Object.keys(sample_specimens); tempArray.forEach(key => { sample_specimens[key].forEach(data => { const sampleObject = {'type': key, "uuid": data.uuid, "sample_uuid": data.sample_uuid, "mould_number": data.mould_number}; res.push(sampleObject); }); }); return res; }, []); console.log(result)
Voici ma prise: jsfiddle.net/khrismuc/hmbydp3x La principale empoche est que vous allez Transformer un tableau dans un autre, la fonction importante est donc
mappe () code>
@Chrisg Merci excellent, travaillez exactement comment j'en ai besoin. Je vais étudier cette réponse pour déterminer comment le faire seul à l'avenir. Acclamations