从数组里删除指定元素的时候, 一般都是写作 arr.splice(arr.indexOf(item), 1)。因为通常能取到这个元素时, 它是在这一集合内的, 所以一直以来也没有去判断这个元素是否在这一刻是否在数组中。
但是今天被这个写法坑了几个小时。在某个操作里直接、间接的尝试从数组里删除某元素, 由于第二次删除的时候它已经不在数组里了, 导致 arr.indexOf(item) 取值为 -1, 结果删掉了数组末尾的元素。
结论: 还是不能偷懒, 必须要先判断一下数组里是否有这个元素, 再用 splice 方法删除…