You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript数组中忽略时间按日期去重对象

去除JSON数组中仅eventDate时间部分不同的重复条目

1. 实现日期格式化函数

先写一个函数,把带时间的日期字符串(比如"August 15, 2022 at 9:00 AM")转换成"Mon Aug 15 2022"格式:

function formatEventDate(dateStr) {
  // 拆分字符串提取纯日期部分
  const dateSegment = dateStr.split(' at ')[0];
  // 转成Date对象后调用toDateString得到目标格式
  return new Date(dateSegment).toDateString();
}

2. 处理数组并完成去重

遍历原始数组,统一格式化每个对象的eventDate,再利用Map实现去重(重复日期默认保留最后一个出现的对象,若要保留第一个可改用forEach遍历判断):

// 你的原始数据数组
const originalData = [
  {
    formField7: "Test",
    amountDue: "Test",
    serviceType: "Course",
    staffMember: "Test",
    formField2: "Test",
    formResponse2: "-",
    formResponse7: "Test",
    formField6: "Test",
    formField10: "Test",
    paymentStatus: "Test",
    formField1: "Test",
    dateOfBooking: "Test",
    _id: "Test",
    _owner: "Test",
    _createdDate: "Test",
    serviceName: "Test",
    formField8: "Test",
    paymentMethod: "Test",
    groupSize: "1",
    formField4: "Test",
    formResponse1: "Test",
    formField5: "Test",
    _updatedDate: "Test",
    formResponse5: "Test",
    eventDate: "August 15, 2022 at 9:00 AM",
    formResponse8: "Test",
    couponName: "Test",
    formResponse0: "Test",
    formResponse11: "Test",
    clientEmail: "Test",
    formField9: "Test",
    attendanceStatus: "Test",
    sessionDuration: "Test",
    formField3: "Test",
    formResponse4: "-",
    clientAddress: "-",
    formResponse9: "Test",
    clientName: "Jane Doe",
    formField11: "Test",
    formResponse6: "Test",
    formField0: "Test",
    bookingStatus: "Test",
    clientPhoneNumber: "Test",
    amountPaid: "Test",
    formResponse10: "Test",
    formResponse3: "Test"
  },
  {
    formField7: "Test",
    amountDue: "Test",
    serviceType: "Course",
    staffMember: "Test",
    formField2: "Test",
    formResponse2: "-",
    formResponse7: "Test",
    formField6: "Test",
    formField10: "Test",
    paymentStatus: "Test",
    formField1: "Test",
    dateOfBooking: "Test",
    _id: "Test",
    _owner: "Test",
    _createdDate: "Test",
    serviceName: "Test",
    formField8: "Test",
    paymentMethod: "Test",
    groupSize: "1",
    formField4: "Test",
    formResponse1: "Test",
    formField5: "Test",
    _updatedDate: "Test",
    formResponse5: "Test",
    eventDate: "August 15, 2022 at 1:00 AM",
    formResponse8: "Test",
    couponName: "Test",
    formResponse0: "Test",
    formResponse11: "Test",
    clientEmail: "Test",
    formField9: "Test",
    attendanceStatus: "Test",
    sessionDuration: "Test",
    formField3: "Test",
    formResponse4: "-",
    clientAddress: "-",
    formResponse9: "Test",
    clientName: "Jane Doe",
    formField11: "Test",
    formResponse6: "Test",
    formField0: "Test",
    bookingStatus: "Test",
    clientPhoneNumber: "Test",
    amountPaid: "Test",
    formResponse10: "Test",
    formResponse3: "Test"
  }
];

// 格式化所有对象的eventDate字段
const formattedArray = originalData.map(item => ({
  ...item,
  eventDate: formatEventDate(item.eventDate)
}));

// 去重:利用Map的键唯一性,重复日期只保留最后一个
const uniqueArray = [...new Map(formattedArray.map(item => [item.eventDate, item])).values()];

// 若要保留第一个出现的重复项,可改用下面的写法
// const uniqueArray = [];
// const dateTracker = new Map();
// formattedArray.forEach(item => {
//   if (!dateTracker.has(item.eventDate)) {
//     dateTracker.set(item.eventDate, item);
//     uniqueArray.push(item);
//   }
// });

console.log(uniqueArray);

关键说明

  • 日期格式化通过split(' at ')拆分字符串,精准提取不含时间的日期部分,再借助Date.toDateString()自动生成Mon Aug 15 2022格式的字符串
  • 去重逻辑依赖Map的键唯一性,确保同一日期只保留一个对象

内容的提问来源于stack exchange,提问作者user9138698

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:50:22