0
votes

Réagir JavaScript - Json Comment fusionner plusieurs éléments de tableau dans une chaîne

J'ai une réponse JSON comme ci-dessous: xxx

maintenant, je veux fusionner les tableaux de chaque "ID" (1,2 dans l'exemple) dans la chaîne (; délimité) comme ci-dessous: < / p> xxx

La clé est dynamique, donc pour certains enregistrements, il existe 2 tableaux et pour certains enregistrements, il peut être 3 ou 4 et peut être 1.

J'ai essayé Utilisation de réact / java script array.concat () , mais je ne sais pas comment le faire de manière dynamique. Aidez-moi, s'il vous plaît. Merci.


0 commentaires

4 Réponses :


0
votes

Il s'agit vraiment de deux problèmes: en boucle via un éventail d'objets pour les combiner dans un seul objet et en boucle à travers un objet pour concéder tout son tableau.

S'attaquer au second, quelque chose comme ça fonctionnerait:

p>

const concatArraysInObject = (obj) => 
  Object.values(obj).reduce((result, arr) => result.concat(arr), []);
  
const mergeObjectsInArray = (arr, dataKey) =>
  arr.reduce((result, obj) => ({ ...result, [obj.id]: concatArraysInObject(obj[dataKey]) }), {});
  
const input = [
  { id: 'A', data: { a: [1,2,3], b: [4,5,6] } },
  { id: 'B', data: { c: [7,8,9], d: [10,11,12] } }
];

const output = mergeObjectsInArray(input, 'data');
console.log(output);


0 commentaires

3
votes

Ceci est facilité facilement à l'aide de objet.values ​​(). Appartement (). Joindre (';') code> démontré ci-dessous:

p>

let arr=[{"id":1,"food":{"fruits":["Banana","Orange","Apple","Mango"],"veggies":["greens","peppers","carrot","potatoes"],}},{"id":2,"food":{"fruits":["grapes","berries","peach","pears"],"veggies":["cabbage","spinach"],"dairy":["nutmilk","goatmilk"]}}];
const result = arr.map(({id,food}) => ({id, food: Object.values(food).flat().join(';')}));
console.log(result);


0 commentaires

0
votes

Essayez ceci en utilisant BASIC pour la boucle. À l'intérieur, vous calculerez la clé de la clé de manière dynamique et une valeur ajoutée de l'objet.values ​​de l'objet itérateur.

p>

var input = [{
    id: 1,
    food: {
        fruits: ["Banana", "Orange", "Apple", "Mango"],
        veggies: ["greens", "peppers", "carrot", "potatoes"]
    }
},
{
    id: 2,
    food: {
        fruits: ["grapes", "berries", "peach", "pears"],
        veggies: ["cabbage", "spinach"],
        dairy: ["nutmilk", "goatmilk"]
    }
}
];

var temp = [];
for (var i = 0; i < input.length; i++) {
temp.push({
    [`id_${input[i].id}`]: Object.values(input[i].food)
        .flat(1)
        .join(";")
});
}
console.log(temp); // this gives you an array
console.log(Object.assign(...temp));// in case you require one single object


0 commentaires

1
votes

premier aplatit en utilisant mappe code>, plat code> et rejoindre code>. Ensuite, convertissez la matrice résultante d'objets à un seul objet à l'aide d'un seul objet à l'aide de Attribuer code>.

p>

var db = [{"id": 1,"food": {"fruits": ["Banana", "Orange", "Apple", "Mango"], "veggies": ["greens","peppers","carrot","potatoes"], }},{"id" : 2,"food": {"fruits": ["grapes", "berries", "peach", "pears" ], "veggies": ["cabbage","spinach"], "dairy": ["nutmilk","goatmilk"]}}];

var flat = db.map(
  ({id, food}) => ({[`id_${id}`]: Object.values(food).flat().join(';')})
);
var result = Object.assign(...flat);
console.log(result);


2 commentaires

Un raccourci un peu intelligent: objet.Assign (... plat)


C'est bien ! Merci à tous pour votre aide ! :)