Javascript 如何编写一个函数,用数组从多个对象创建一个对象
下午好,我遇到了困难。我面临一个我无法解决的问题。我有一个对象数组:Javascript 如何编写一个函数,用数组从多个对象创建一个对象,javascript,arrays,object,Javascript,Arrays,Object,下午好,我遇到了困难。我面临一个我无法解决的问题。我有一个对象数组: [ { date: "2020-04-20", groups: ["apple"], type: ["fruit"], }, { date: "2020-04-20", groups: ["potate"], type: ["vegetable"], }, { date: "2
[
{
date: "2020-04-20",
groups: ["apple"],
type: ["fruit"],
},
{
date: "2020-04-20",
groups: ["potate"],
type: ["vegetable"],
},
{
date: "2020-04-23",
groups: ["burger"],
type: ["fastfood"],
},
{
date: "2020-04-24",
groups: ["cola"],
type: ["water"],
}
]
我需要编写一个函数,它将确定按日期将两个对象合并为一个对象。
也就是说,函数将返回的预期结果应如下所示:
[
{
date: "2020-04-20",
groups: ["apple", "potate"],
type: ["fruit", "vegetable"],
},
{
date: "2020-04-23",
groups: ["burger"],
type: ["fastfood"],
},
{
date: "2020-04-24",
groups: ["cola"],
type: ["water"],
}
]
提前感谢您的帮助首先,考虑你要完成的任务。您想将数据合并在一起。一个很好的工具是
Array.prototype.reduce
从概念上讲,我建议在日期和整个对象之间创建一个映射。这将帮助您确定条目是否已存在。然后,可以在迭代时将相关键推送到相关数组。最后,您可以使用Object.values
仅获取所创建地图的值
这是我经常使用的一种情景模式
我会做如下的事情:
const输入=[
{
日期:“2020-04-20”,
组:[“苹果”],
类型:[“水果”],
},
{
日期:“2020-04-20”,
组:[“potate”],
类型:[“蔬菜”],
},
{
日期:“2020-04-23”,
组别:[“汉堡”],
类型:[“快餐”],
},
{
日期:“2020-04-24”,
团体:[“可乐”],
类型:[“水”],
}
];
const combine=(arr)=>{
const dateMap=arr.reduce((附件,项目)=>{
如果(!附件[项目日期]){
acc[项目日期]=项目;
}否则{
acc[item.date]。组=[…acc[item.date]。组,…item.groups];
acc[item.date]。类型=[…acc[item.date]。类型,…item.type];
}
返回acc;
}, {});
返回Object.values(日期映射);
};
console.log(合并(输入))代码>您可以使用标准分组和对象来收集值
var数据=[{date:“2020-04-20”,group:[“apple”],type:[“fruit”]},{date:“2020-04-20”,group:[“potate”],type:[“plate”],{date:“2020-04-23”,group:[“burger”],type:[“fastfood”]},{date date:“2020-04-24”,group:[“cola”],type:[“water”],
结果=对象值(数据减少((r,o)=>{
r[o.date]=r[o.date]|{date:o.date,组:[],类型:[];
r[o.date].groups.push(…o.groups);
r[o.date].type.push(…o.type);
返回r;
}, {}));
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
您也可以使用forEach
解决此问题。尝试一下:
var sortedData=[];
var数据=[{日期:“2020-04-20”,分组:[苹果],类型:[“水果”]},{日期:“2020-04-20”,分组:[“土豆”],类型:[“蔬菜”]},{日期:“2020-04-23”,分组:[“汉堡”],类型:[“快餐”]},{日期:“2020-04-24”,分组:[“可乐”],类型:[“水”};
data.forEach((元素、索引、arr)=>{
isDatePresent=sortedData.some((值)=>value.date==elem.date);
如果(!isDatePresent){
分类数据推送(elem);
}否则{
var index=sortedData.findIndex((值)=>value.date==elem.date);
sortedData[index].groups=[…sortedData[index].groups,…elem.groups];
sortedData[index]。类型=[…sortedData[index]。类型,…元素组];
}
});
console.log(sortedData)
向我们展示您的尝试,以便我们可以帮助您修复代码。只有代码没有帮助。如果您可以写一些解释,那么您的代码在库中所做的事情就更容易理解了,请看这里:这绝对是一个公平的批评。我确实想帮助人们成为更好的程序员。我只是补充了一个解释。