按天维度分组过滤JSON数据并生成新对象的技术实现问题
按日期属性对JSON数据按天分组过滤的实现方案
我需要对包含日期属性的JSON数据按天进行分组过滤,生成按天聚合的对象用于后续二次过滤。现有按月份分组的实现代码,但无法复用至按天分组,自己尝试编写的代码未得到预期结果,相关代码如下:
// 模拟API返回数据 const data = [ { date: "10/01/2023", id: 1 , whatever: "hi" }, { date: "01/02/2023", id: 2 , whatever: "hello"}, ]; // 去重且非空的日期列表 const dtList = ["10/01/2023", "01/02/2023"]; // 按月份分组的示例代码 var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun" ]; var ordered = {}; // 遍历API数据 for (var i = 0, len = data.length; i < len; i++) { var entry = data[i]; var m = entry.date.substring(0, 10); if (m !== "") { var mm = parseInt(m.split("/")[1]) - 1; if (!ordered[months[mm]]) { ordered[months[mm]] = []; } ordered[months[mm]].push(entry); } } // 后续二次过滤示例 ordered.Jan?.forEach((obj) => { if (!isNaN(obj.nuParc)) { nuParcJun += obj.nuParc; setNuParcJun(nuParcJun); } }); // 尝试的按天分组代码(未成功) dtList.forEach((value) => { var dtsSep = Data.filter((obj) => obj.date.includes(value) ); var ordered = {}; var ordered1 = Object.assign(ordered, dtsSep); });
问题分析
你尝试的按天分组代码存在几个核心问题:
- 变量名大小写错误:
Data应为data(JavaScript区分大小写) - 循环内重复声明
ordered,导致每次循环都重置对象,无法累积分组结果 - 使用
Object.assign将数组赋值给对象的方式错误,会把数组索引作为对象键,而非目标日期 - 分组结果未存储到外部可访问的变量中,后续无法调用使用
正确的按天分组实现
提供两种实现方式,可根据需求选择:
方式1:直接对所有数据按天分组
const orderedByDay = {}; data.forEach(entry => { const day = entry.date; // 如果当前日期对应的数组不存在,初始化空数组 if (!orderedByDay[day]) { orderedByDay[day] = []; } orderedByDay[day].push(entry); });
方式2:基于dtList过滤并分组(仅保留指定日期)
const orderedByDay = {}; dtList.forEach(dateKey => { // 过滤出当前日期对应的所有数据 orderedByDay[dateKey] = data.filter(entry => entry.date === dateKey); });
二次过滤示例
按天分组后,可直接通过日期键访问对应数据并进行二次处理:
// 处理2023年10月1日的数据 orderedByDay["10/01/2023"]?.forEach(obj => { if (!isNaN(obj.nuParc)) { nuParcOct1 += obj.nuParc; setNuParcOct1(nuParcOct1); } });
内容的提问来源于stack exchange,提问作者lucas barbosa
相关产品推荐
相关产品推荐

