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

