Flutter中如何统计字符串列表中重复日期的数量?
统计日期字符串列表中的日期出现次数并生成指定格式输出
我来帮你解决这个统计日期出现次数的问题!你的需求是从包含日期时间的字符串列表中,提取纯日期部分并统计每个日期的出现次数,最后生成"日期,mykey:次数"格式的输出列表。下面是具体的实现方案:
核心思路
- 先用映射对象统计次数:通过遍历输入列表,提取每个元素的日期部分,用对象的键存储日期,值存储对应出现的次数,这样能高效完成统计。
- 生成目标格式的输出列表:遍历统计好的映射对象,把每个日期和次数格式化成你需要的字符串,推入输出列表。
JavaScript 实现代码
基础循环版本(和你原来的代码风格一致)
const MyList_date_input = ["2020-09-08 11:16", "2020-09-08 08:10", "2020-09-09 21:23", "2020-09-09 21:59", "2020-09-10 07:46"]; const List_date_output = []; // 用于存储日期和对应计数的映射 const dateCountMap = {}; // 第一步:遍历输入列表,统计每个日期的出现次数 for (var i = 0; i < MyList_date_input.length; i++) { // 提取日期部分:按空格分割字符串,取第一个元素 const datePart = MyList_date_input[i].split(' ')[0]; // 更新计数:如果日期已存在则加1,否则初始化为1 if (dateCountMap[datePart]) { dateCountMap[datePart]++; } else { dateCountMap[datePart] = 1; } } // 第二步:根据统计结果生成输出列表 for (const date in dateCountMap) { List_date_output.push(`${date},mykey:${dateCountMap[date]}`); } console.log(List_date_output); // 输出结果:["2020-09-08,mykey:2", "2020-09-09,mykey:2", "2020-09-10,mykey:1"]
更简洁的现代JS版本(使用reduce和map)
如果喜欢更简洁的代码,可以用数组的reduce方法完成统计,再用map生成输出:
const MyList_date_input = ["2020-09-08 11:16", "2020-09-08 08:10", "2020-09-09 21:23", "2020-09-09 21:59", "2020-09-10 07:46"]; // 用reduce统计每个日期的出现次数 const dateCountMap = MyList_date_input.reduce((countMap, item) => { const datePart = item.split(' ')[0]; // 简化计数更新逻辑 countMap[datePart] = countMap[datePart] ? countMap[datePart] + 1 : 1; return countMap; }, {}); // 将统计结果转成目标格式的列表 const List_date_output = Object.entries(dateCountMap).map(([date, count]) => `${date},mykey:${count}`); console.log(List_date_output);
关键细节说明
- 日期提取的健壮性:如果你的输入日期格式可能有变化(比如时间部分用其他分隔符),可以用正则表达式来提取日期,比如:
这个正则会匹配开头的const datePart = /^\d{4}-\d{2}-\d{2}/.exec(MyList_date_input[i])[0];yyyy-mm-dd格式的日期,适配更多场景。 - 效率对比:用映射对象统计的时间复杂度是O(n),比嵌套循环(O(n²))高效很多,尤其是当列表很大的时候优势明显。
内容的提问来源于stack exchange,提问作者Nitneuq
相关产品推荐
相关产品推荐

