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

