vue查找数组索引,相同id的内容替换,保存数据为最新输入的,javascript的findIndex方法

需求:a-table的插槽里有一列是input输入框,输入内容后一条或者多条都可以保存,在table外有个保存的按钮,点击后保存。

所以输入框输入内容后,在失去焦点的时候获取数据。然后把值保存到数组中,调接口保存数据。

在功能实现后,测试的时候发现,我只保存了一条数据,但是传参却传了两条一样id的,内容不一样的。
在这里插入图片描述
这是因为我在失去焦点的事件中,通过push,把内容保存到数组中,每一次失去焦点都会push进一条新数据,也就是说我在输内容的时候
输完先让光标失去焦点,然后删除再输入再失去光标后再输入,如果一直重复这样的操作,同一个id会push每一次我输入的内容,这个bug显然不合理,我只要最新一次输入的值

 <a-input
                  v-model="record.fVcContent"
                  @focus.native.capture="editDataContent(record)"
                  @blur.native.capture="inputonBlur"
                  placeholder="请输入"
                />

saveAllList是保存数据的数组

//失去输入框焦点
    inputonBlur(e) {
      // console.log(e);
      if (!e.target.value.trim()) return // 优化防止没输入内容也调接口
      let obj = {
        fPkDataId: this.fPkDataId,
        fVcContent: e.target.value
      }
      let i = this.saveAllList.findIndex(item => item.fPkDataId == obj.fPkDataId)
      if (i == -1) {
        this.saveAllList.push(obj)
      } else {
        this.saveAllList.splice(i, 1, obj)
      }
      this.$store.commit('updateData', this.saveAllList)
    },

通过findIndex查找索引,如果等于-1代表没有找到,没有找到就直接push到数组里,如果找到了,就用splice替换,splice(从i的位置,删除1项,插入obj对象)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值