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

Vue.js使用axios请求数据时如何判断是否已存在后加入数组

原有代码核心问题
  • 存储id的数组在for循环内部声明,每次循环都会被重置为空,无法累计存储已存在的id
  • 判断条件错误使用this.receivedData.id,this.receivedData是接口返回的完整数组,不存在id属性,查重逻辑完全失效
  • 最后直接将完整返回数组赋值给去重数组,覆盖了所有去重操作,完全达不到去重效果
  • 没有提前在Vue的data中定义持久化存储去重数据的响应式变量,新老数据无法正常合并
正确实现方案

首先在Vue的data中定义两个变量,一个存储最终去重后的全量数据,一个存储已存在的id用于快速查重:

data() {
  return {
    // 存储所有去重后的最终数据,是响应式变量可直接用于页面渲染
    allDataList: [],
    // 用Set存储已存在的id,查重效率比数组高很多,数据量大时优势明显
    existIds: new Set()
  }
}

修正后的axios请求回调代码:

.then((response) => {
  const newData = response.data
  // 遍历本次接口返回的所有数据
  newData.forEach(item => {
    // 只有当前数据id不存在时才新增到数组
    if (!this.existIds.has(item.id)) {
      this.existIds.add(item.id)
      this.allDataList.push(item)
    }
  })
})

如果不想多维护一个Set变量,也可以直接在现有数组中查重,写法如下,适合数据量不大的场景:

.then((response) => {
  const newData = response.data
  newData.forEach(item => {
    // 遍历现有数组判断是否存在同id的元素
    const isExist = this.allDataList.some(existItem => existItem.id === item.id)
    if (!isExist) {
      this.allDataList.push(item)
    }
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:54:00