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

Angular切换数组元素时始终删除首值忽略传入值问题修复

问题根因

你的代码存在两处API使用错误,直接导致逻辑异常:

  • splice方法参数不符合要求:Array.splice(start, deleteCount)的第一个参数start必须是数值类型的索引位,你直接传入了字符串类型的元素值,JS会将字符串强制转换为数字,传入'one'这类非数字字符串时转换结果为NaN,splice接收到非法起始值时会默认从索引0(也就是数组第一个元素)开始操作,所以会出现始终删除第一个条目的现象。
  • push方法多传了无效参数:你写的this.values.push(value, 1)会把value和数字1都作为新元素追加到数组末尾,会导致数组里多出无关的数字1。
修复后的代码

先通过indexOf拿到目标元素在数组中的真实索引,再传入splice执行删除,追加元素时只传目标值即可:

toggleTest(value) {
  const valueIndex = this.values.indexOf(value);
  if (valueIndex !== -1) {
    this.values.splice(valueIndex, 1);
  } else {
    this.values.push(value);
  }
}

如果项目用了Angular的OnPush变更检测策略,更推荐用不可变数据的写法,避免直接修改原数组:

toggleTest(value) {
  this.values = this.values.includes(value)
    ? this.values.filter(item => item !== value)
    : [...this.values, value]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:09:18