重写数组的方法(改变原数组)

重写数组的方法(改变原数组)

下图是我自我学习模拟数组时总结的一些重新数组的方法:

img

本文我们暂不讨论不改变原数组的方法,只谈改变原数组用到的 6 种方法。

改变原数组的方法

push()

按参数顺序向数组尾部添加元素,返回新数组的长度

1var color = ['red', 'green'] 2var color2 = color2.push(['blue','purple']) 3 4alert(color) // ['red', 'green'] 5alert(color2) // ['red', 'green','blue','purple']

重写:

1Array.prototype._push = function() { 2 for(let i = 0; i < arguments.length; i++) { 3 this[this.length] = arguments[i] 4 } 5 return this.length 6} 7 8var arr1 = [1, 2, 3] 9console.log(arr1.push(4, 5)) // 返回新数组的长度 5 10console.log(arr1._push(6, 7)) // 返回新数组的长度 7 11console.log(arr1) // [1, 2, 3, 4, 5, 6, 7]

pop()

删除数组中的最后一个元素,并返回该元素

1var color = ['red', 'green','blue','purple'] 2var color2 = color.pop() 3 4alert(color) // ['red','green','blue'] 5alert(color2) // ['purple'] 6Array.prototype._pop() = function() { 7 if(this.length) { 8 let res = this[this.length - 1] 9 delete this[this.length] 10 this.length-- 11 return res 12 } 13} 14 15let arr2 = [1, 2, 3, 4, 5] 16console.log(arr2.pop()) // 返回删除的元素 5 17console.log(arr2._pop()) // 返回删除的元素 4 18console.log(arr2) // [1, 2, 3]

sort()

默认情况下,sort () 会按照升序重新排列数组元素,即最小的值在前面,最大的值在后面。因此,sort () 会在每一项上调用 string () 转换函数,然后比较字符串来决定顺序。即使数组的元素都是数值,也会先把数组转换成字符串再比较、排序。例如:

1let values = [0, 1, 5, 10, 15] 2values.sort() 3console.log(values) //0,1,10,15,5

一开始数组中的数值的顺序是正确的,但是调用 sort () 会按照这些数值的字符串形式重新排序。所以它可以接收一个比较函数,用于判断哪个值应该排在前面。

1function compare(a, b) { 2 if(a < b) return -1 3 else if(a > b) return 1 4 else return 0 5}

这个比较函数可以适用于大多数数据类型,可以把他当做参数传给 sort (),例如:

1let values = [0, 1, 5, 10, 15] 2values.sort(compare) 3console.log(values) // 0,1,5,10,15

当然,也可以使排序产生降序效果,只需要把返回值交换一下即可:

1function compare(a, b) { 2 if(a < b) return 1 3 else if(a > b) return -1 4 else return 0 5} 6 7let values = [0, 1, 5, 10, 15] 8values.sort(compare) 9console.log(values) // 15,10,5,1,0

重写:

1var arr = [4, 1, 6, 9, 3, 2, 8, 7] 2var arr2 = [4, 1, 6, 9, 3, 2, 8, 7] 3console.log(arr.sort()); 4 5Array.prototype.mySort = function (arr) { 6 for (var i = 0; i < this.length; i++) { 7 for (var j = i + 1; j < this.length; j++) { 8 if (this[i] > this[j]) { 9 var temp = this[i] 10 this[i] = this[j] 11 this[j] = temp; 12 } 13 } 14 } 15 return this 16} 17 18console.log('mySort:',arr2.mySort());

img

reverse()

将数组倒叙,改变原数组

1Array.prototype.myReverse = function () { 2 var left = 0, 3 right = this.length - 1; 4 5 while (left < right) { 6 var temp = this[left]; 7 this[left] = this[right]; 8 this[right] = temp; 9 left++; 10 right--; 11 12 } 13} 14var arr2 = [1, 3, 5, 7, 9] 15console.log('before:', arr2) 16myReverse(arr2) 17console.log('after:', arr2)

shift()

删除数组第一个元素,并返回该元素

1var arr = [1, 3, 5, 7] 2console.log(arr.unshift(9)) 3console.log(arr) 4 5Array.prototype.myUnshift = function () { 6 var L = this.length; 7 var newArr = arguments.length 8 for (var i = L + newArr - 1; i >= 0; i--) { 9 if (i > newArr - 1) { 10 this[i] = this[i - newArr]; 11 } else { 12 this[i] = arguments[i]; 13 } 14 } 15 return this.length; 16} 17 18var arr2 = [1, 3, 5, 7,] 19 20console.log('myUnshift:', arr2.myUnshift(9)); 21console.log('myUnshift:', arr2)

img

unshift()

向数组开头增加一个或多个元素,并返回新的长度,以上就是我练习时使用的方法,感兴趣的伙伴可在3A的服务器上部署环境,自己进行开发试验。

1var arr = [1, 3, 5, 7] 2console.log(arr.unshift(9)) 3console.log(arr) 4 5Array.prototype.myUnshift = function () { 6 var L = this.length; 7 var newArr = arguments.length 8 for (var i = L + newArr - 1; i >= 0; i--) { 9 if (i > newArr - 1) { 10 this[i] = this[i - newArr]; 11 } else { 12 this[i] = arguments[i]; 13 } 14 } 15 return this.length; 16} 17 18var arr2 = [1, 3, 5, 7,] 19 20console.log('myUnshift:', arr2.myUnshift(9)); 21console.log('myUnshift:', arr2)

img

点赞
收藏

评论区

加载中...

相关推荐

JavaScript数组常用方法总结

数组基本操作可以归纳为增、删、改、查,需要留意的是哪些方法会对原数组产生影响,哪些方法不会下面对数组常用的操作方法做一个归纳增下面前三种是对原数组产生影响的增添方法,第四种则不会对原数组产生影响push()unshift()splice()concat()push

swift闭包表达式和尾随闭包

我们从一个Swift函数说起。并以此为例子。Swift的标准库提供了一个叫做sorted(by:)的方法,会根据你提供的排序闭包将已知类型的数组的值进行排序。一旦它排序完成,sorted(by:)方法会返回与原数组类型大小完全相同的一个新数组,该数组的元素是已排序好的。原始数组不会被sorted(by:)方法修改。我们以soted方法为例子

Java 集合类

为什么使用集合数组长度是固定,如果要改变数组的长度需要创建新的数组将旧数组里面的元素拷贝过去,使用起来不方便。java给开发者提供了一些集合类,能够存储任意长度的对象,长度可以随着元素的增加而增加,随着元素的减少而减少,使用起来方便一些。数组和集合的区别区别1:数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类

Numpy基本用法简介

importnumpyasnp'''数组基础操作np.array()创建数组arr.shape返回数组arr的size(行,列)arr.reshape(size)改变数组的size,元素个数要以一

JavaScript splice() 方法和JavaScript split() 方法

定义和用法splice()方法向/从数组中添加/删除项目,然后返回被删除的项目。注释:该方法会改变原始数组。语法arrayObject.splice(index,howmany,item1,.....,itemX)参数描述index必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位

Java中ArrayList的使用

ArrayList类是一个特殊的数组动态数组。来自于System.Collections命名空间;通过添加和删除元素,就可以动态改变数组的长度。优点:1、支持自动改变大小2、可以灵活的插入元素3、可以灵活的删除元素局限:比一般的数组的速度慢一些;用法一、初始化:1、不初始化容量ArrayList