-1
votes

Filtre avancé et réducteur

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) xxx pré>

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);
}, []);


2 commentaires

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 ()


@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


3 Réponses :


0
votes

Que diriez-vous d'utiliser des pour Acheach code> comme suit.

p>

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);


0 commentaires

1
votes

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.

p>

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)


5 commentaires

Et s'il existe plusieurs échantillon_specimens ? Désolé, mais ne pouvait pas comprendre la raison de mettre le premier index [0]


Plusieurs échantillon_specimens n'ont pas été spécifiés dans la question @bilalsiddiqui. Re votre deuxième question: sample_specimens 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


Sauf que n'était pas 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



0
votes

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)


0 commentaires