-7
votes

Convertir un tableau de matrice en tableau d'objet

J'ai un tableau de tableaux (matrice 2D), et je veux le convertir en un éventail d'objets. Dans la matrice résultante, j'aimerais que chaque objet ait un nom de clé (voir la sortie attendue ci-dessous) xxx

mon résultat attendu: xxx < p> note L'itération de chaque matrice (dans Data ) doit être consécutive de manière à ce qu'il donne le résultat attendu


1 commentaires

Hey Arup, bienvenue à Stackoverflow. Ceci est un site de débogage, mais vous n'avez rien donné à déboguer! Veuillez modifier votre question pour inclure votre code / tentative (s).


3 Réponses :


1
votes

semble être là-bas est un élément supplémentaire dans la valeur Quantité code>. J ai mis a jour [2, 4, 4, 3, 1, 2] code> à [2, 4, 4, 1, 2] code> supprimé 3 code> pour correspondre le résultat, en espérant que c'est une faute de frappe.

p>

let data = [
  ["Apple", "Orange", "Banana", "Pears", "Peach"],
  [40, 35, 25, 58, 84],
  [2, 4, 4, 1, 2],
  ["Red", "Yellow", "Green", "Violet", "Blue"]
];

let output = [];
let props = ["name", "price", "quantity", "color"];

function updateInfo(row, prop){
  row.filter((value, index) => {
    if (output[index]) {
      output[index][prop] = value;
    } else {
      output.push({
        [prop]: value
      });
    }
  });
};

data.filter((row, index) => {
  updateInfo(row, props[index]);
});



console.log(output);


2 commentaires

oh oui .. sa tyo .. Avez-vous compris ma question M. Dipak, pouvez-vous le résoudre


J'ai ajouté l'extrait de code avec ma réponse, s'il vous plaît développer et vérifier. :)



1
votes

Une solution consiste à créer d'abord un carte entre les index des code> wastter-array code> et la propriété (ou (ou clé code>) nom que vous souhaitez vous assigner (mais cela pourrait être remplacé Par un tableau comme celui-ci ["nom", "prix", "quantité", "couleur"] code>). De plus, vous pouvez obtenir la longueur minimum code> des tableaux internes pour vérifier ultérieurement la non-création de Objets code> qui n'aura pas toutes les propriétés. Après avoir fait cette pré-initialisation, vous pouvez utiliser Array.reduce () pour générer votre résultat attendu:

p>

const data = [
 ['Apple', 'Orange', 'Banana', 'Pears', 'Peach'],
 [40, 35, 25, 58, 84],
 [2, 4, 4, 3, 1, 2],
 ['Red', 'Yellow', 'Green', 'Violet', 'Blue']
];

let mapIdxToProp = new Map([[0, "name"],[1, "price"],[2, "quantity"],[3, "color"]]);
let minLen = Math.min(...data.map(x => x.length));

let res = data.reduce((acc, arr, idx) =>
{
    arr.forEach((x, j) =>
    {
        (j < minLen) && (acc[j] = acc[j] || {}, acc[j][mapIdxToProp.get(idx)] = x);
    });
    return acc;
}, []);

console.log(res);


0 commentaires

1
votes

La solution la plus simple forte> (non la plus efficace) à mon avis em> est de simplement boucler dans le tableau, ajoutant à un autre tableau à mesure que vous allez.

p >

let arr = [
  ['Apple', 'Orange', 'Banana', 'Pears', 'Peach'],
  [40, 35, 25, 58, 84],
  [2, 4, 4, 1, 2],
  ['Red', 'Yellow', 'Green', 'Violet', 'Blue']
];
let keys = ["name", "price", "quantity", "color"];
let output = [];

//Add's blank objects too the output array
for (let i = 0; i < arr[0].length; i++) {
  output.push({});
}

//Loops through the array
for (let i = 0; i < arr.length; i++) {
  //Loops through the sub array
  for (let x = 0; x < arr[i].length; x++) {
    //Adds the sub array to the key that corresponds to it
    output[x][keys[i]] = arr[i][x];
  }
}

console.log(output);


0 commentaires