javascript - 如何根据同一日期合并两个对象数组
问题描述
实际上,我想将所有具有相同日期的产品合并到同一个对象中,如下所示,我尝试了很多算法但它不起作用所以这就是我发布这篇文章的原因。您可以找到数据示例和预期结果。
let obj = {}; for(let i = 0; i < this.data.length; i++){ let date = this.data[i].Date; let p_date = obj[date] || {}; obj[date] = Object.assign(p_date, this.data[i]); } let result = Object.values(obj); return result;
this.data = [
{
"Date": "12/06/2019",
"Rank": 1,
"ASIN": "B01N9J7MLI",
"Rating": "4,1",
"Reviews": 4592,
"Price": "114,99",
"Prime": "No"
},
{
"Date": "12/06/2019",
"Rank": 2,
"ASIN": "B074QXGBG6",
"Rating": 4,
"Reviews": 29163,
"Price": "60,99",
"Prime": "No"
}];
预期结果 :
this.data = {
"Date": "12/06/2019",
"Products": [
{
"Date": "12/06/2019",
"Rank": 1,
"ASIN": "B01N9J7MLI",
"Rating": "4,1",
"Reviews": 4592,
"Price": "114,99",
"Prime": "No"
},
{
"Date": "12/06/2019",
"Rank": 2,
"ASIN": "B074QXGBG6",
"Rating": 4,
"Reviews": 29163,
"Price": "60,99",
"Prime": "No"
}
],
}
感谢您的回答
解决方案
使用Array#reduce将数据累积到具有日期属性的对象中。Foreach 对象查看累积对象中是否存在具有此日期的属性。如果不使用属性日期和产品(使用空数组)创建它。在这两种情况下,将当前对象添加到此数组中。
最后使用Object.values从您的对象中获取值以获取所需的数组。
this.data = [
{
"Date": "12/06/2019",
"Rank": 1,
"ASIN": "B01N9J7MLI",
"Rating": "4,1",
"Reviews": 4592,
"Price": "114,99",
"Prime": "No"
},
{
"Date": "12/06/2019",
"Rank": 2,
"ASIN": "B074QXGBG6",
"Rating": 4,
"Reviews": 29163,
"Price": "60,99",
"Prime": "No"
}];
let res = Object.values(this.data.reduce((acc, cur) => {
if (!acc[cur.Date])
acc[cur.Date] = {Date: cur.Date, Products: []};
acc[cur.Date].Products.push(cur);
return acc;
}, {}));
console.log(res);
推荐阅读
- javascript - save() 不使用猫鼬改变
- amazon-web-services - 当我通过 Terraform 设置 VPC 和 EC2 时,为什么我无法 ping 我的 EC2 实例?
- node.js - sequelize 中 mongoose 中的 $push 的替代方案是什么?
- python - 如何将字符串从 HTML 传递到 Python 并返回到 HTML
- python - python条件分组填充
- spring - Spring Boot Apache Derby 重复键值问题
- python - 尝试使用#gekko 最大化这个简单的非线性问题,但出现此错误
- python - 如何将 SymLogNorm 与 matplotlib 一起使用,但颜色条仍然呈现线性?
- api - 输入:指定的转换无效
- arrays - 在 React 中设置对象数组返回空数组