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

ES5环境下如何生成含(date,shift)唯一组合的JSON数据

解决ES5环境下按(date, shift)组合分组去重的问题

我懂你现在的困扰——在ES5环境里没法用ES6的Set,原来的代码因为对象引用的判断逻辑问题,根本没法实现按date和shift组合去重的需求。先帮你理清楚原来代码的问题,再给你一个可行的ES5方案:

原来代码的问题分析

你原来的代码逻辑有几个关键错误:

  • 你用datas.includes(agendaDatas[i].data)判断,但datas里存的是对象,而agendaDatas[i].data是字符串类型,两者永远不可能匹配;
  • 就算是判断对象,includes用的是严格相等(===),两个内容相同但内存地址不同的对象会被认为是不同的,所以includes永远返回false,导致所有元素都被重复添加;
  • 你的目标是按date和shift的组合来唯一化,但代码里是分开判断date和shift是否存在,最后还把date和shift拆成单独的对象push进去,完全偏离了需求。

ES5环境下的解决方案

在ES5里,我们可以用一个普通对象作为哈希映射表,通过date+shift的组合字符串作为键,来跟踪已经出现过的组合。具体步骤如下:

  1. 创建一个空对象用来记录已存在的date+shift组合;
  2. 遍历原数组,对每个元素生成唯一的组合键;
  3. 如果这个组合键还没在映射表里,就把当前元素(或仅包含date和shift的对象)加入结果数组,并在映射表里标记该组合已存在。

代码示例

// 假设agendaDatas是你的原始数据数组
var agendaDatas = [
  { "date": "2019-07-11", "hour": "12:00", "idAppointmentsHour": 47914218, "shift": "T" },
  { "date": "2019-07-11", "hour": "13:00", "idAppointmentsHour": 47914219, "shift": "T" },
  { "date": "2019-07-12", "hour": "10:00", "idAppointmentsHour": 47914220, "shift": "M" },
  { "date": "2019-07-11", "hour": "14:00", "idAppointmentsHour": 47914221, "shift": "T" }
];

var uniqueMap = {};
var result = [];

for (var i = 0; i < agendaDatas.length; i++) {
  var currentItem = agendaDatas[i];
  // 生成唯一组合键,用|分隔避免date或shift包含特殊字符导致冲突
  var groupKey = currentItem.date + '|' + currentItem.shift;
  
  // 检查该组合是否已存在,hasOwnProperty避免原型链属性干扰
  if (!uniqueMap.hasOwnProperty(groupKey)) {
    // 如果你需要保留原对象的所有属性,就存currentItem;如果只需要date和shift,就存下面的对象
    // uniqueMap[groupKey] = { date: currentItem.date, shift: currentItem.shift };
    uniqueMap[groupKey] = currentItem;
    result.push(uniqueMap[groupKey]);
  }
}

console.log(result);
// 输出结果会是两个对象:2019-07-11+T,2019-07-12+M的组合

代码说明

  • 用date + '|' + shift作为键,是为了避免date或shift中包含-这类字符时,出现键冲突的情况;
  • hasOwnProperty方法确保我们只检查对象自身的属性,不会被原型链上的属性干扰,更安全;
  • 如果你只需要保留date和shift两个属性,把uniqueMap[groupKey] = currentItem改成uniqueMap[groupKey] = { date: currentItem.date, shift: currentItem.shift }即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:05:06