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

从AJAX响应中获取唯一对象并筛选最新时间戳记录

解决方法:筛选B='H2'、A唯一且时间戳C最新的对象

原代码的问题在于,它只是取了每个A对应的第一条B='H2'的记录,没法确保这条记录是时间戳C最新的。要实现需求,我们可以通过分组+时间比较的方式来处理,具体代码如下:

$.ajax({
    type: "POST",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    cache: false, 
    url: '<%= ResolveUrl("../WebService/ABC.asmx/GetSomething") %>',
    data: JSON.stringify({ StartDate: startDate, EndDate: endDate }),
}).done(function (result) {
    jResult = JSON.parse(result.d);
    uniqueLabels = [];    

    // 1. 先筛选出所有B为'H2'的记录,缩小处理范围
    const h2Records = jResult.filter(item => item.B === 'H2');
    
    // 2. 用对象分组,自动保证A的唯一性,同时保留最新时间的记录
    const uniqueMap = {};
    h2Records.forEach(item => {
        const currentTimestamp = new Date(item.C);
        // 如果当前A未存储,或者当前记录的时间比已存的更新,就替换
        if (!uniqueMap[item.A] || currentTimestamp > new Date(uniqueMap[item.A].C)) {
            uniqueMap[item.A] = item;
        }
    });
    
    // 3. 将对象中的值转为数组,得到最终结果
    const a = Object.values(uniqueMap);
});

代码逻辑说明

  • 第一步过滤:先把所有B不等于'H2'的记录排除,减少后续需要处理的数据量,提升效率
  • 第二步分组比较:利用对象的键唯一性,以A的值作为键存储记录;每次遍历H2记录时,将时间戳转为Date对象进行比较,只保留每个A对应的最新时间记录
  • 第三步转数组:通过Object.values()将对象中存储的所有符合要求的记录提取为数组,就是我们需要的最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:32:47