开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
从数组首位删除元素
如果要移除数组里的第一个元素,可以用下面的代码 for (var i = 0; i < numbers.length; i++)(numbers(i] = numbers[i+1]; 下面这张图呈现了这段代码的执行过程:
我们把数组里所有的元素都左移了一位。但数组的长度依然是17,这意味着数组中有额外的一个元素(值是undefined)。在最后一次循环里,i + 1引用了一个数组里还未初始化的位置在Java、C/C+或C#等一些语言里,这样写可能就会抛出异常了,因此不得不在numbers.Iength1处停止循环。 可以看到,我们只是把数组第一位的值用第二位覆盖了,并没有删除元素( 因为数组的长度和之前还是一样的,并且了多一个未定义元素 )。
使用ehift方法
要确实删除数组的第一个元素,可以用shift方法实现:
numbers.shift();
那么,假如本来数组中的值是从-4到12,长度为17,执行了上述代码后,数组就只有-3到12了,并且长度也会减小到16。
在任意位置添加或删除元素
目前为止、我们已经学习了如何添加元素到数组的开头或结尾处,以及怎样删除数组开头和结束位置上的元素。那如何在数组中的任意位置上删除或添加元素? 我们可以使用splice方法,简单地通过指定位置/索引,就可以删除相应位置和数量的元素:
numbers.splice(5,3);
这行代码删除了从数组索引5开始的3个元素。这就意味着numbers[5]、numbers[6]和numbers[7]从数组中删除了。现在数组里的值变成了-3、-2、-1、0、1、5、6、7、8、9、10.11和12(2、3、4已经被移除 )。
现在,我们想把数字2、3、4插人数组里,放到之前删除元素的位置上,可以再次使用splice方法:
numbers.splice(5,0,2,3,4);
splice方法接收的第一个参数,表示想要删除或插人的元素的索引值。第二个参数是删除元素的个数(这个例子里,我们的目的不是删除元素,所以传人0。 第三个参数往后,就是要添加到数组里的值(元素2、3,4)。输出会发现值又变成了从-3到12。
最后,执行下这行代码:
numberg.gpl1ce(5,3,2,3,4);
输出的值是从-3到12。原因在于,我们从索5开始删除了3个元素,但也从索引S开始添加了元素2、3、4