这篇文章主要讲解了如何实现和使用JS数组,平移,流行,转移方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
<强>尾部添加(推)强>
从解释中可以看的出,推动方法只要将要添加的元素依次放到数组的最后即可,不会改变原有数组元素的索引。所以循环参数列表,将新元素依次放到数组的最后即可。
Array.prototype。_push=function(…值){ (var=0;我& lt;arguments.length;我+ +){ 这个(这个。长度]=参数[我] } 返回this.length } var arr=(1、2、3、4) 加勒比海盗。_push (9, 8) console.log (arr)//[1、2、3、4、9、8]
向数组的头部添加元素,数组的长度也会发生变化,但不像尾部添加的操作,数组原有元素索引不改变。做头部添加的操作,需要将原有元素的索引向右移动。
例如只添加一位,则需要将数组的每个元素的索引依次向右移一位,假设原来数组长度是4,头部添加一个元素,长度变为5 .
所以现在就变成:<代码>数组。长度=5> 代码,而目前<代码>数组(5 - 1)代码>是最后一个元素,现在由于依次往后移动,所以,<代码>阵列[5]> 代码必须是最后一个元素
所以我们可以从数组的最后一位的下一位往前循环,将<代码>[我]> 代码数组赋值为<代码>阵列[i - 1]> 代码,循环到1停止,将数组的第0项赋值为需要添加的值。
过程如下
具体代码实现:
Array.prototype。_unshift=function(值){ (让我=this.length;我在;0;我(){ 这[我]=[i - 1] } 这[0]=价值 返回this.length } var arr=(1、2、3、4) arr._unshift (8) console.log (arr);//(8,1、2、3、4)
但上面的代码只实现了一个元素的头部添加,平移方法支持添加多个元素,例如:
var arr=(1、2、3、4) 加勒比海盗。7 unshift(8日) console.log (arr);//(8、7、1、2、3、4]
针对这样的情况,需要知道传入了几个参数,可以从参数对象入手,思路还是上面的思路:
新数组的长度等于原数组的长度+参数的个数,从后往前循环,将原数组的最后一位,移动到新数组的最后一位,
因为需要在头部插入数量为入参个数的元素,所以循环的起点为原数组的长度+参数的个数,循环的终点为入参的个数。
但由于索引总是比长度少一位,所以起点和终点都需要减1 .
现在可以先把循环移动的逻辑写出来
Array.prototype。_unshift=function(…值){ 我(var=(。长度+参数。长度- 1);我在;参数。长度- 1;我(){ 这[我]=[i - arguments.length] } }
再思考一下,由于上一步已经移动完了,数组头部的位置已经空出来了,第二步是有几个参数就要插入几个元素,所以现在只需要循环插入就好:
Array.prototype。_unshift=function(…值){ 我(var=(。长度+参数。长度- 1);我在;参数。长度- 1;我(){ 这\[我]=[i - arguments.length] } (var k=0;k & lt;arguments.length;k + +) { 这[k]=参数[k] } 返回this.length } var arr=[1、2、3、4 \] 加勒比海盗。_unshift (9, 8) console.log (arr);//[9 8,1,2,3,4)
“pop()方法将删除arrayObject的最后一个元素,把数组长度减1,并且返回它删除的元素的值。如果数组已经为空,则流行()不改变数组,
并返回未定义的值”。
这个很好实现,按照定义一步一步做就可以。首先,记录下最后一个元素,便于返回,之后从数组中删除最后一个元素,
将其指向空释放掉,然后将数组的长度减1,最后判断一下是否为空数组。
Array.prototype。_pop=function () { 如果(! this.length) { 返回未定义 } var=[这一端。长度- 1) 这个(这个。长度- 1]=零 这一点。长度=3ざ? 1 返回结束 } var arr=(1、2、3、4) arr._pop () console.log (arr);//(1、2、3)
头部删除,会改变原有数组元素的索引,也就是将未被删除的元素索引都往左移一位,首先要将被删除的元素记录下来便于返回,之后将数组第一个元素指向空,