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