JavaScript Array.splice方法替换问题

来源:互联网 发布:苹果软件怎么下载 编辑:程序博客网 时间:2024/05/10 14:55

该方法可以通过指定起始索引和数据个数的方式,删除或替换数组中的部分数据,改方法的返回值为被删除或替换掉的数据,调用格式为:array.splice(start,count,data),其中,array(必选项,数组名称);start(必选项,整数,起始索引);count(必选项,整数,要删除或替换的元素个数);data(可选项,用于替换指定数据的新数据)。若没有指定data参数,则该指定的数据将会被删除。

开门见山,直接上代码

<script type="text/javascript">        var arr=new Array(1,2,3,4,5,6,7,8,9,10);        writearr("初始",arr);        var rewith=new Array(0,0,0);        var temp1=arr.splice(2,5,rewith);        with(document)        {            writearr("替换了5个数据",temp1);            writearr("替换为",rewith);            writearr("替换后",arr);            arrayLength(arr);            var temp2=arr.splice(3,2);            writearr("删除两个元素",temp2);            writearr("删除后",arr);        }        function writearr(str,array) {            document.write(str+":");            document.write(array.join(","));            document.write("<br>")        }        function arrayLength(arr) {            document.write("arrLength:"+arr.length);            document.write("<br>");        }    </script>

运行结果:
这里写图片描述
结果是不是有些出乎意料呢?
相信大家前4行的输出结果都没有什么意外,对第5,6行的结果也许会有些问题,明明替换后的数组是1,2,0,0,0,8,9,10一共8个元素,为何数组的长度只有6呢?还有arr.splice(3,2)按理来说删除的该是0,0啊,为什么是8,9?请看下图:
这里写图片描述
当我们用一个新的数组(0,0,0)来替换原来的数组指定数据时,将(0,0,0)这个数组当作更新后数组的一个元素,也就是说(0,0,0)和1,2,8,9,10的地位是平等的,要将其视为一个整体,所以(0,0,0)这个元素的索引为2,其后面元素8的索引自然为3,以此类推,所以arr.splice(3,2)删除的是8,9两个元素。

0 0