。
// 选中 / 取消toggleTestType(item:TestTypeItem){item.checked=!item.checked;constindex=this.selectedTestType.findIndex(x=>x.name===item.name);if(item.checked&&index===-1){this.selectedTestType.push(item);}elseif(!item.checked&&index>-1){this.selectedTestType.splice(index,1);}}1. findIndex 的作用
const index = this.selectedTestType.findIndex(x => x.name === item.name);
findIndex 会遍历数组,找出 第一个满足条件的元素的索引。
返回值:
如果找到匹配元素 → 返回该元素在数组中的索引(从 0 开始)。
如果没有找到 → 返回 -1。
举个例子:
constarr=['a','b','c'];arr.findIndex(x=>x==='b');// 返回 1arr.findIndex(x=>x==='d');// 返回 -1所以 -1 就是 数组中不存在这个元素的标记。
2. 为什么写 index === -1 和 index > -1
if(item.checked&&index===-1){this.selectedTestType.push(item);}elseif(!item.checked&&index>-1){this.selectedTestType.splice(index,1);}item.checked && index === -1:
条件解释:当前项被选中,但还没有在已选数组里
动作:把它加入 selectedTestType。
!item.checked && index > -1:
条件解释:当前项被取消选中,并且在已选数组里存在
动作:从 selectedTestType 中移除它。
关键点:
-1 表示“未找到”,所以要用它判断是否存在。
index > -1 表示“找到了”,可以安全地删除。
详细解释:array.splice(start, deleteCount, …items)
start → 从数组的哪个索引位置开始操作
deleteCount → 要删除多少个元素
…items → 可选,要插入的新元素
this.selectedTestType.splice(index,1);index → 找到的要删除的元素在数组中的位置
1 → 只删除一个元素
没有提供其他元素 → 所以只是删除,不添加新元素
这一行就是 从 selectedTestType 数组中移除被取消选中的测试类型。
3. 总结
index 的确是从 0 开始计数的,但 findIndex 没有找到时才返回 -1。
所以这里的判断逻辑是为了:
防止重复添加(避免数组中出现重复元素)
只删除存在的元素,避免报错