You need to enable JavaScript to run this app. JS处理多次AJAX请求时如何避免向数组添加含重复CID的响应数据
优惠活动
大模型
产品
解决方案
定价
更多

JS处理多次AJAX请求时如何避免向数组添加含重复CID的响应数据

问题根因
  • JavaScript中Array.includes()、Array.indexOf()对引用类型(比如对象)做的是引用地址比较,不是内容比较。你每次AJAX返回的data都是独立的新对象,哪怕所有字段完全相同,内存地址也不一样,所以arr.includes(data)永远返回false,自然会插入重复数据。
解决方案

按CID字段去重即可,推荐额外维护一个CID的Set集合,判断效率比每次遍历数组更高:

// 额外定义存储已存在CID的Set和结果数组
const existedCids = new Set();
const arr = [];

for(let i = 0; i< 20; i++){
    $.ajax({
        url: "/bin/adp/rest_api_response.megtile.json",
        method: "POST",
        data: { "session": sessionID, "WIN_NBR": win, "local_time": localT.toString(), "network": "on" },
        beforeSend: function (xhr) {

        },
        success: function (data) {
            urls = data.btn_link;
            var tmp_thumbnail = "url('" + data.image + "')"
            thumbnails = tmp_thumbnail;
            descriptions = data.banner_text;
            btn_txt = data.btn_text;
            titles = data.banner_title;
            cid = data.CID;

            console.log("datttt",arr)
            console.log("dddd",data)
            // 仅CID未存在时才插入数组
            if (!existedCids.has(data.CID)) {
                existedCids.add(data.CID);
                arr.push(data);                        
            }
            
        }
    });
}

如果不想额外维护Set,也可以直接遍历数组判断:

if (!arr.some(item => item.CID === data.CID)) {
    arr.push(data);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:36:02