如何为JSON数据动态设置变量名?按日期拆分数据存储节点
按日期动态存储数据的解决方案
嘿,我完全get你的需求了——你希望obj.data不再是把所有数据都追加到同一个数组里,而是能按日期自动创建独立的节点,每天的数据都存在对应日期的分组里对吧?这事儿不难实现,我给你两种常用的方案,你可以根据自己的场景选:
方案一:用日期作为对象键(推荐,访问效率更高)
首先我们把原来的data从数组改成空对象,这样就能用日期字符串作为键来分组存储数据:
// 初始化对象,把data改成空对象 let obj = { "data_type": "data according to date", "status_message": "", "data": {} };
然后写一个工具函数,用来自动处理每日数据的添加:
function addDailyData(newData) { // 获取当前日期,格式化为YYYY-MM-DD的标准格式(方便后续查找) const today = new Date().toISOString().split('T')[0]; // 如果当前日期的节点还不存在,就初始化一个空数组 if (!obj.data[today]) { obj.data[today] = []; } // 把新数据追加到当天的数组里 obj.data[today].push(newData); }
调用示例
// 模拟添加今天的两条数据 addDailyData({ temp: 25, humidity: 60 }); addDailyData({ temp: 26, humidity: 58 }); // 模拟明天的数据(手动修改日期测试) const tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); const tomorrowStr = tomorrow.toISOString().split('T')[0]; obj.data[tomorrowStr] = [{ temp: 24, humidity: 62 }];
最终效果
此时obj的结构会变成这样:
{ "data_type": "data according to date", "status_message": "", "data": { "2024-05-20": [ { temp: 25, humidity: 60 }, { temp: 26, humidity: 58 } ], "2024-05-21": [ { temp: 24, humidity: 62 } ] } }
这种方式的好处是访问某一天的数据特别快,直接用obj.data['2024-05-20']就能拿到当天所有数据。
方案二:保持data为数组(适合需要顺序遍历的场景)
如果你的业务场景必须让data保持数组形式,也可以让每个数组元素是包含日期和对应数据的对象:
// 保持初始的数组结构 let obj = { "data_type": "data according to date", "status_message": "", "data": [] }; function addDailyData(newData) { const today = new Date().toISOString().split('T')[0]; // 查找数组中是否已有当天的条目 let todayEntry = obj.data.find(item => item.date === today); // 如果没有,就创建新条目并加入数组 if (!todayEntry) { todayEntry = { date: today, data: [] }; obj.data.push(todayEntry); } // 追加新数据到当天的数组 todayEntry.data.push(newData); }
最终效果
此时obj的结构是:
{ "data_type": "data according to date", "status_message": "", "data": [ { "date": "2024-05-20", "data": [ { temp: 25, humidity: 60 }, { temp: 26, humidity: 58 } ] }, { "date": "2024-05-21", "data": [ { temp: 24, humidity: 62 } ] } ] }
这种方式适合需要按日期顺序遍历所有数据的场景。
内容的提问来源于stack exchange,提问作者Nitin yadav
相关产品推荐
相关产品推荐

