Je veux fusionner un seul tableau de plusieurs objets de manière dynamique avec la même clé. Un exemple des données est:
newData = [{
"30 Apr 2017BDT",
"1.00000",
"0.0",
"0.01107",
"0.1"
}, {
"29 Apr 2017BDT",
"1.00000",
"0.0",
"0.01107",
"-0.5"
}];
3 Réponses :
Vous pouvez utiliser réduire les valeurs de groupe par p> RapportTime code> const data = [{ ReportTime: "30 Apr 2017BDT", Rate: "1.00000", AvgGrowth: "0.0"}, { ReportTime: "30 Apr 2017BDT", Rate: "0.01107", AvgGrowth: "0.1"}, { ReportTime: "29 Apr 2017BDT", Rate: "1.00000", AvgGrowth: "0.0"
}, { ReportTime: "29 Apr 2017BDT", Rate: "0.01107", AvgGrowth: "-0.5"}]
const merged = data.reduce((op, inp) => {
let key = inp.ReportTime
op[key] = op[key] || []
op[key].push(inp)
return op
}, Object.create(null))
console.log(merged)
Votre sortie attendue n'a pas l'air d'un JS valide. Vous pouvez toutefois obtenir une gamme de tableaux en itérant sur la matrice en utilisant quelques méthodes telles que .Reduce () code> , .map () code> et Object.Entries () CODE> :
P>
var data = [
{ReportTime: "30 Apr 2017BDT", Rate: "1.00000", AvgGrowth: "0.0"},
{ReportTime: "30 Apr 2017BDT", Rate: "0.01107", AvgGrowth: "0.1"},
{ReportTime: "29 Apr 2017BDT", Rate: "1.00000", AvgGrowth: "0.0"},
{ReportTime: "29 Apr 2017BDT", Rate: "0.01107", AvgGrowth: "-0.5"}
];
var key = 'ReportTime';
var reducer = function(data, key) {
var result = [];
var map = {};
data.forEach(function(o, i) {
map[o[key]] = map[o[key]] || [];
for(var k in o) {
if(!(k === key)) { map[o[key]].push(o[k]); }
};
});
for(var j in map) {
result.push([].concat(j, map[j]));
};
return result;
};
console.log(reducer(data, key));
C'est ce que je veux exactement comme la solution, mais me donne une erreur «valeurs» de la propriété n'existe pas sur le type 'ObjectConstructor'. Code>
@Parthraval utilisez-vous des documents dactylographiés? Si oui, voici la réponse.
Je pense que si vous faites de l'objet de rapports de groupe dans l'objet avec la maintenance du taux et de l'avigion sera utile.
passerez sur les éléments, construisez un objet avec des clés comme "Rapporttime". Lorsque le rapport de rapport existe déjà dans l'objet, il suffit de mettre à jour le tarif et l'avigion. Après l'itération, obtenez l'objet.values () de l'objet ci-dessus pour l'obtenir en tant que matrice. P>
p>
const update = data => {
const res = {};
data.forEach(item => {
if (!res[item.ReportTime]) {
res[item.ReportTime] = {
ReportTime: item.ReportTime,
Rate: [],
AvgGrowth: []
};
}
res[item.ReportTime].Rate.push(item.Rate);
res[item.ReportTime].AvgGrowth.push(item.AvgGrowth);
});
return Object.values(res);
};
var data = [
{
ReportTime: "30 Apr 2017BDT",
Rate: "1.00000",
AvgGrowth: "0.0"
},
{
ReportTime: "30 Apr 2017BDT",
Rate: "0.01107",
AvgGrowth: "0.1"
},
{
ReportTime: "29 Apr 2017BDT",
Rate: "1.00000",
AvgGrowth: "0.0"
},
{
ReportTime: "29 Apr 2017BDT",
Rate: "0.01107",
AvgGrowth: "-0.5"
}
];
console.log(update(data));
Quelle est la clé et quels sont vos critères pour fusionner?
Clé est
reporter code> lorsque nous trouvons le même heure de rapport que nous devons fusionner cet objetLa structure de données que vous essayez de créer n'est pas valide car les propriétés des objets n'ont aucune valeur.
@RoryMCcrossan Ok, pouvez-vous s'il vous plaît laissez-moi savoir comment puis-je fusionner deux objets avec le même nom de propriété dans un seul tableau?
Pourquoi le taux et la croissance moyenne n'ont-ils pas fusionné dans votre production? Ce sont de nouvelles propriétés ..
@Raven Ce que je dois faire, c'est que je dois comparer le temps de rapport et sur la base de cela doit fusionner deux objets