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

基于三列去重:保留SharePoint列表重复组中最新记录

解决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>&nbsp;' + format_date(creation_date) + '&nbsp;</td>' +     
                                        '<td align=center>&nbsp;' + item.WorkflowStageShort+ '&nbsp;</td>' +
                                        '<td align=center>&nbsp;' + item.Author.Title + '&nbsp;</td>' +
                                        '<td align=center>&nbsp;' + item.Source + '&nbsp;</td>' +
                                        '<td align=center>&nbsp;' + item.Previous_Total_Most_Likely_Forec + '&nbsp;</td>' +
                                        '<td align=center>&nbsp;' + item.Submitted_Total_Most_Likely_Fore + '&nbsp;</td>' +
                                    '</tr>');                               
                                }
                            }
                            $('.audit_content').hide();
                            console.log(data);
                        },
            error: function (data) { alert("获取审计跟踪数据时发生错误")}
    });
}

关键修改说明:

  1. API请求补充字段:原请求的$select里没包含User_x0020_Name,所以先把这个字段加上,否则无法获取到用户名称用于去重判断。
  2. 新增去重逻辑:
    • 创建seenCombinations对象,用来存储已经处理过的列组合,键是三个目标列拼接的字符串
    • 遍历每条数据时,先生成当前条目的组合键,检查是否已存在于对象中
    • 只有未出现过的组合,才会被添加到表格,确保每组重复记录只保留创建时间最晚的第一条(因为数据已倒序)
  3. 错误提示中文优化:把英文错误提示改成中文,更友好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:48:24