基于三列去重:保留SharePoint列表重复组中最新记录
你的需求是从Audit_Trail_Financial_Data列表拉取数据后,移除User_x0020_Name、Previous_Total_Most_Likely_Forec、Submitted_Total_Most_Likely_Fore三列完全相同的重复记录,只保留每组重复里Created时间最晚的条目。
因为原请求已经用$orderby=Created desc把数据按创建时间倒序排列了,所以可以利用这个排序,用一个对象来记录已经处理过的列组合,第一次遇到的组合就是最新的,后续重复的直接跳过即可。
修改后的完整代码如下:
function loadAuditTrailFinancials() { var auditTrailURL = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/GetByTitle('Audit_Trail_Financial_Data')/items?$select=Author/Title,Previous_Total_Most_Likely_Forec,Submitted_Total_Most_Likely_Fore,Forecast_Approval_Reason,Title,Created,Workflow_Stage_Name,WorkflowStageShort,Source,Event,User_x0020_Name&$filter=Title eq '" + PDP_projUid + "'&$orderby=Created desc&$expand=Author/ID"; console.log("loadAuditTrailFinancials:" + auditTrailURL); $.ajax({ url: auditTrailURL, method: "GET", headers: {"Accept": "application/json; odata=verbose"}, success: function (data) { var items = data.d.results; // 用于记录已处理过的列组合,避免重复 var seenCombinations = {}; for (var i = 0; i < items.length; i++) { var item = items[i]; // 生成唯一组合键:三个目标列拼接成字符串 var comboKey = `${item.User_x0020_Name}_${item.Previous_Total_Most_Likely_Forec}_${item.Submitted_Total_Most_Likely_Fore}`; // 如果这个组合没出现过,才处理并添加到表格 if (!seenCombinations[comboKey]) { seenCombinations[comboKey] = true; var creation_date = item.Created; console.log(item); $('#AuditTrailTable_Financial').append('<tr class="audit_content">' + '<td align=center> ' + format_date(creation_date) + ' </td>' + '<td align=center> ' + item.WorkflowStageShort+ ' </td>' + '<td align=center> ' + item.Author.Title + ' </td>' + '<td align=center> ' + item.Source + ' </td>' + '<td align=center> ' + item.Previous_Total_Most_Likely_Forec + ' </td>' + '<td align=center> ' + item.Submitted_Total_Most_Likely_Fore + ' </td>' + '</tr>'); } } $('.audit_content').hide(); console.log(data); }, error: function (data) { alert("获取审计跟踪数据时发生错误")} }); }
关键修改说明:
- API请求补充字段:原请求的
$select里没包含User_x0020_Name,所以先把这个字段加上,否则无法获取到用户名称用于去重判断。 - 新增去重逻辑:
- 创建
seenCombinations对象,用来存储已经处理过的列组合,键是三个目标列拼接的字符串 - 遍历每条数据时,先生成当前条目的组合键,检查是否已存在于对象中
- 只有未出现过的组合,才会被添加到表格,确保每组重复记录只保留创建时间最晚的第一条(因为数据已倒序)
- 创建
- 错误提示中文优化:把英文错误提示改成中文,更友好。
内容的提问来源于stack exchange,提问作者extraJK
相关产品推荐
相关产品推荐

