数组之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] 

原文地址:https://www.cnblogs.com/xjy20170907/p/11128062.html