jquery - 按日期合并来自 json 数组的结果
问题描述
我正在尝试在 jQuery 中合并来自给定 JSON 的结果。目前,我一直在尝试使用这里的片段:Merge Json array date based但我没有任何运气来实现我需要的最终结果。
当前结果:
[
{
"searches": "37",
"views": "0",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2019-12-31"
},
{
"searches": "0",
"views": "6",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2019-12-31"
},
{
"searches": "68",
"views": "0",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2020-01-01"
},
{
"searches": "0",
"views": "6",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2020-01-01"
}
]
要达到的结果:
[
{
"searches": "37",
"views": "6",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2019-12-31"
},
{
"searches": "68",
"views": "6",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2020-01-01"
},
]
任何帮助将不胜感激!
解决方案
我用reduce函数做的
let merged_arr = arr.reduce((acc, cur, index, arr)=>{
let new_acc = [];
if(index === 1){
new_acc.push(acc);
if(acc.date === cur.date){
new_acc.map((o)=>{
o.searches = +o.searches + +cur.searches;
o.views = +o.views + +cur.views;
o.leads = +o.leads + +cur.leads;
o.fliers = +o.fliers + +cur.fliers;
o.website = +o.website + +cur.website;
o.calls = +o.calls + +cur.calls;
o.shares = +o.shares + +cur.shares;
});
} else {
new_acc.push(cur)
}
} else {
new_acc = acc;
if( new_acc.some( (o)=>{ return Object.values(o).includes(cur.date) } ) ){
new_acc.map((o)=>{
if(o.date === cur.date){
o.searches = +o.searches + +cur.searches;
o.views = +o.views + +cur.views;
o.leads = +o.leads + +cur.leads;
o.fliers = +o.fliers + +cur.fliers;
o.website = +o.website + +cur.website;
o.calls = +o.calls + +cur.calls;
o.shares = +o.shares + +cur.shares;
}
});
} else {
new_acc.push(cur);
}
}
return new_acc;
});
结果:
或者像这样:
let arr = [
{
"searches": "37",
"views": "0",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2019-12-31"
},
{
"searches": "0",
"views": "6",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2019-12-31"
},
{
"searches": "68",
"views": "0",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2020-01-01"
},
{
"searches": "0",
"views": "6",
"leads": "0",
"fliers": "0",
"website": "0",
"calls": "0",
"shares": "0",
"date": "2020-01-01"
}
];
let merged_arr = arr.reduce((acc, cur, index, arr)=>{
let new_acc = [];
if(index === 1){
new_acc.push(acc);
if(acc.date === cur.date){
new_acc.map((o)=>{
o.searches = (+o.searches + +cur.searches).toString();
o.views = (+o.views + +cur.views).toString();
o.leads = (+o.leads + +cur.leads).toString();
o.fliers = (+o.fliers + +cur.fliers).toString();
o.website = (+o.website + +cur.website).toString();
o.calls = (+o.calls + +cur.calls).toString();
o.shares = (+o.shares + +cur.shares).toString();
});
} else {
new_acc.push(cur)
}
} else {
new_acc = acc;
if( new_acc.some( (o)=>{ return Object.values(o).includes(cur.date) } ) ){
new_acc.map((o)=>{
if(o.date === cur.date){
o.searches = (+o.searches + +cur.searches).toString();
o.views = (+o.views + +cur.views).toString();
o.leads = (+o.leads + +cur.leads).toString();
o.fliers = (+o.fliers + +cur.fliers).toString();
o.website = (+o.website + +cur.website).toString();
o.calls = (+o.calls + +cur.calls).toString();
o.shares = (+o.shares + +cur.shares).toString();
}
});
} else {
new_acc.push(cur);
}
}
return new_acc;
});
console.log('merged_arr: ', merged_arr);
推荐阅读
- bash - 在 MacOs bash 5 上安装 git subrepo 时出现问题
- javascript - 如何通过类名获取位于父元素中的元素的值
- javascript - 当其他窗口以 7/8 角度弹出时,防止背景窗口向上滚动到顶部
- mongodb - 通过 Azure Data Lake 和 Power BI 进行数据分析(加入 mongoDB 和 SQL 数据)
- swift - Swift 中的类与结构(复制)
- swift - 如何编写实现访问类型属性的通用函数
- python - 在 Amazon EMR 中安装 autogluon
- r - 如何在 R 中获取小簇(几个像素)的大小
- javascript - 使用 Java 和 HTML 的表单中的阶乘。我的代码有什么问题?
- r - 使用学习者创建一个开放式问题:r 中的教程