數組之map方法


數組的map方法會循環數組,在函數里對數組的每一項進行處理,最后返回一個處理后的函數;但是如果我們在函數里對數組本身進行改變的話會怎樣呢?

       var removeElement = function(nums, val) {
            nums.map(function (item, index){
                if(item === val){
                    console.log(index); // 2 3  第一次原數組輸出val項的index為2,下邊splice改變了原數組為[1,2,4,3,5],在執行函數進入判斷輸出val項的index為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] 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM