數組的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