javascript - 根据每周过滤器过滤对象数组并返回每周数据
问题描述
我有一个来自后端的对象数组,我想根据具体创建日期的周开始按创建日期进行过滤数据并将每周数据推送到一个新数组,我需要帮助
[
{id: "0ee1a179-2f87-4f11-916c-1341e3d9bcf3", adspend: 1500, createdAt: "25-02-2019"},
{id: "44b0172a-f9e4-4561-b903-fa6b18ee055c", adspend: 4278, createdAt: "27-02-2019"},
{id: "5b66a486-56ff-41e9-9969-e0d820f8521c", adspend: 3966, createdAt: "27-02-2019"},
{id: "88cb602f-63ef-40c7-a30e-cf9dbfd95cc5", adspend: 47898, createdAt: "28-02-2019"},
{id: "3251d613-4d17-4900-b394-2cd8c34f8bf7", adspend: 1536, createdAt: "28-02-2019"},
{id: "c78dfb97-0e2c-4937-b154-0808a8650f08", adspend: 75317, createdAt: "01-03-2019"},
{id: "2eea6d91-5444-4926-8010-df58e59b930b", adspend: 2194, createdAt: "01-03-2019"},
{id: "631af893-b1f6-4012-800a-df27f387232b", adspend: 670, createdAt: "02-03-2019"},
{id: "44b0172a-f9e4-4561-b903-fa6b18ee055c", adspend: 4278, createdAt: "04-03-2019"},
{id: "5b66a486-56ff-41e9-9969-e0d820f8521c", adspend: 3966, createdAt: "04-03-2019"},
{id: "88cb602f-63ef-40c7-a30e-cf9dbfd95cc5", adspend: 47898, createdAt: "06-03-2019"},
{id: "3251d613-4d17-4900-b394-2cd8c34f8bf7", adspend: 1536, createdAt: "06-03-2019"},
{id: "c78dfb97-0e2c-4937-b154-0808a8650f08", adspend: 75317, createdAt: "09-03-2019"},
{id: "2eea6d91-5444-4926-8010-df58e59b930b", adspend: 2194, createdAt: "09-03-2019"},
{id: "631af893-b1f6-4012-800a-df27f387232b", adspend: 670, createdAt: "09-03-2019"},
{id: "022dab43-cc38-451f-bfd9-a012de5a6f9f", adspend: 603, createdAt: "11-03-2019"},
{id: "44b0172a-f9e4-4561-b903-fa6b18ee055c", adspend: 4278, createdAt: "12-03-2019"},
{id: "88cb602f-63ef-40c7-a30e-cf9dbfd95cc5", adspend: 47898, createdAt: "13-03-2019"},
{id: "c78dfb97-0e2c-4937-b154-0808a8650f08", adspend: 75317, createdAt: "13-03-2019"},
{id: "2eea6d91-5444-4926-8010-df58e59b930b", adspend: 2194, createdAt: "14-03-2019"},
{id: "631af893-b1f6-4012-800a-df27f387232b", adspend: 670, createdAt: "14-03-2019"},
]
解决方案
您可以为每个日期生成星期,并使用以年份为键的星期,创建一个包含所有常见星期数据的数组。
let data = [{ id: "0ee1a179-2f87-4f11-916c-1341e3d9bcf3", adspend: 1500, createdAt: "25-02-2019" }, { id: "44b0172a-f9e4-4561-b903-fa6b18ee055c", adspend: 4278, createdAt: "27-02-2019" }, { id: "5b66a486-56ff-41e9-9969-e0d820f8521c", adspend: 3966, createdAt: "27-02-2019"}, { id: "88cb602f-63ef-40c7-a30e-cf9dbfd95cc5", adspend: 47898, createdAt: "28-02-2019" }, { id: "3251d613-4d17-4900-b394-2cd8c34f8bf7", adspend: 1536, createdAt: "28-02-2019" }, { id: "c78dfb97-0e2c-4937-b154-0808a8650f08", adspend: 75317, createdAt:"01-03-2019" }, { id: "2eea6d91-5444-4926-8010-df58e59b930b", adspend: 2194, createdAt: "01-03-2019" }, { id: "631af893-b1f6-4012-800a-df27f387232b", adspend: 670, createdAt: "02-03-2019" }, { id: "44b0172a-f9e4-4561-b903-fa6b18ee055c", adspend: 4278,createdAt: "04-03-2019" }, { id: "5b66a486-56ff-41e9-9969-e0d820f8521c", adspend: 3966, createdAt: "04-03-2019" }, { id: "88cb602f-63ef-40c7-a30e-cf9dbfd95cc5", adspend: 47898, createdAt: "06-03-2019" }, { id: "3251d613-4d17-4900-b394-2cd8c34f8bf7", adspend:1536, createdAt: "06-03-2019" }, { id: "c78dfb97-0e2c-4937-b154-0808a8650f08", adspend: 75317, createdAt: "09-03-2019" }, { id: "2eea6d91-5444-4926-8010-df58e59b930b", adspend: 2194, createdAt: "09-03-2019" }, { id: "631af893-b1f6-4012-800a-df27f387232b",adspend: 670, createdAt: "09-03-2019" }, { id: "022dab43-cc38-451f-bfd9-a012de5a6f9f", adspend: 603, createdAt: "11-03-2019" }, { id: "44b0172a-f9e4-4561-b903-fa6b18ee055c", adspend: 4278, createdAt: "12-03-2019" }, { id: "88cb602f-63ef-40c7-a30e-cf9dbfd95cc5",adspend: 47898, createdAt: "13-03-2019" }, { id: "c78dfb97-0e2c-4937-b154-0808a8650f08", adspend: 75317, createdAt: "13-03-2019" }, { id: "2eea6d91-5444-4926-8010-df58e59b930b", adspend: 2194, createdAt: "14-03-2019" }, { id: "631af893-b1f6-4012-800a-df27f387232b",adspend: 670, createdAt: "14-03-2019" }, ],
result = Object.values(data.reduce((r,o) => {
let weekNumber = moment(o.createdAt, "DD-MM-YYYY").isoWeek(),
key = weekNumber + "_" + o.createdAt.slice(-4);
r[key] = r[key] || [];
r[key].push({...o});
return r;
},{}));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
推荐阅读
- python - 如何在python中计算预测集和测试集之间的二进制交叉熵?
- c++ - OpenCV => ImageMagick cv::Mat 到 Magick::Image CV_UC3
- java - 从java中的日期()获取小时
- r - 使用 dev.off() 保存 600 分辨率的 .JPG 箱线图
- rust - 如何创建使用流利的链接语法而不需要括号的类型?
- python - 使用来自复杂 API 调用的数据更新 Flask 页面的最佳实践方法是什么?
- base64 - base64 编码字符串前面的“77u/”是什么?
- sql - 计算 SQL Server 中两个相似表列之间的比率
- google-apps - Google Oauh2 验证无效参数
- swift - 每毫秒更新进度条