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) mon résultat attendu: p> Data code>) doit être consécutive de manière à ce qu'il donne le résultat attendu p> p>
3 Réponses :
semble être là-bas est un élément supplémentaire dans la valeur p> 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.
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);
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. :)
Une solution consiste à créer d'abord un carte entre les index des code> wastter-array code> et la propriété p> (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:
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);
La solution 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);
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).