JavaScript数组对象按日期合并失败问题排查
问题排查:按date合并对象时visits和miles属性未被合并?
问题背景
我清楚这类对象合并问题存在诸多变体,已经参考相关答案推进到当前步骤,但始终得不到预期结果,特此求助。
初始数据是包含date字段(格式为"月/日/年")的对象数组,已移除undefined值,需求是按date字段合并同日期的对象。
合并前的初始数据
[{ data: { hours: ["2"], timeIn: ["2023-05-01T18:00:00Z"], timeOut: ["2023-05-01T20:00:00Z"], type: ["Client"] }, date: "5/1/2023", entries: 2 }, { data: { hours: [2, 2], timeIn: ["2023-05-10T18:00:00Z", "2023-05-10T16:00:00Z"], timeOut: ["2023-05-10T20:00:00Z", "2023-05-10T18:00:00Z"], type: ["Client"] }, date: "5/10/2023", entries: 4 }, { date: "5/1/2023", visits: 2 }, { date: "5/10/2023", visits: 4 }, { date: "5/1/2023", miles: 20 }, { date: "5/10/2023", miles: 40 }]
我编写的合并代码
var merged = []; cleaned.forEach(function(item) { var idx; var found = merged.some(function(el, i) { idx = el.date === item.date ? i : null; return el.date === item.date; }); if (!found) { merged.push(item); } else if (idx !== null) { console.log(Object.keys(item)) for (k in Object.keys(item)) { console.log(k) if (item.hasOwnProperty(k)) { merged[idx][k] = item[k]; } } } });
实际输出结果(缺失visits和miles属性)
[{ data: { hours: ["2"], timeIn: ["2023-05-01T18:00:00Z"], timeOut: ["2023-05-01T20:00:00Z"], type: ["Client"] }, date: "5/1/2023", entries: 2 }, { data: { hours: [2, 2], timeIn: ["2023-05-10T18:00:00Z", "2023-05-10T16:00:00Z"], timeOut: ["2023-05-10T20:00:00Z", "2023-05-10T18:00:00Z"], type: ["Client"] }, date: "5/10/2023", entries: 4 }]
疑问
我已经用hasOwnProperty判断属性合法性,且当date匹配时idx也不为null,为什么visits和miles属性没有被合并到最终结果里?
内容的提问来源于stack exchange,提问作者Jowz
相关产品推荐
相关产品推荐

