从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
相关产品推荐
相关产品推荐

