数组的map方法会循环数组,在函数里对数组的每一项进行处理,最后返回一个处理后的函数;可是若是咱们在函数里对数组自己进行改变的话会怎样呢?数组
var removeElement = function(nums, val) { nums.map(function (item, index){ if(item === val){ console.log(index); // 2 3 nums.splice(index, 1); } }); }; removeElement([1,2,3,4,3,5], 3);
经过以上例子能够看出,若是咱们在某一次循环改变原数组的话,那么接下来循环的处理是在已经改变的数组的基础上进行的。函数
var removeElement = function(nums, val) { nums.map(function (item, index){ if(item === val){ nums.splice(index, 1); // 已经删除数组的索引为2的项了,后一个2就变成索引为2的项了,然而已经处理过索引2了,因此2这个索引就没处理,致使有一个2没有删除掉。 } }); }; removeElement([0,1,2,2,3,0,4,2], 2);
以上代码中若是是这样的数组:[0,1,2,2,2,3,0,4,2] ,nums为[0, 1, 2, 3, 0, 4];若是是[0,1,2,2,2,2,3,0,4,2] ,nums为[0, 1, 2, 2, 3, 0, 4] spa