当前位置: 首页 > Web前端 > JavaScript

数组方法重构与迭代

时间:2023-03-27 10:30:22 JavaScript

数组方法重构1.Array.prototype.pop()(1)pop()方法用于删除数组的最后一个元素,并返回删除的元素。注意:这个方法改变了数组的长度!语法:array.pop()返回值:所有类型返回删除的元素varfruits=["Banana","Orange","Apple","Mango"];水果.pop();控制台日志(水果);//fruits结果输出:Banana,Orange,Apple(2)重构pop()方法Array.prototype.myPop=function(){if(this.length==''){returnundefined;}else{varresult=this[this.length-1];这个.length--;返回结果;}}vararr=[1,2,3,4,5];控制台日志(arr);varresult=arr.myPop();控制台日志(结果);结果如图:![picture.png](/img/bVcUyCl)2.Array.prototype.push()(1)push()方法可以在数组末尾添加一个或多个元素,并返回新的长度。注意:新元素将添加到数组的末尾,该方法改变数组的长度语法:array.push(item1,item2,...,itemX)返回值:Number数组的新长度varfruits=["香蕉","橙子","苹果","芒果"];//push()在末尾添加一个元素参数为要添加的元素返回值为修改后数组的长度【更改原数组】fruits.push("Kiwi")console.log(fruits);//水果结果输出:Banana,Orange,Apple,Mango,Kiwi(2)push()方法重构Array.prototype.myPush=function(){for(vari=0;i0;i--){if(i>arguments.length){this[i-1]=this[i-1-arguments.length];}else{这个[i-1]=参数[i-1];}}返回总和;}vararr=[1,2,3,4,5];控制台日志(arr);var结果=arr。myUnshift('a','b','c');控制台日志(结果);控制台日志(arr);结果如图:![Picture.png](/img/bVcUyDM)迭代法重构1.Array.prototype.forEach()(1)forEach()方法用于调用数组的每个元素和将元素传递给回调函数注意:forEach()不会为空数组执行回调函数。语法:array.forEach(function(currentValue,index,arr),thisValue)参数:参数说明function(currentValue,index,arr)为必填项。为数组中的每个元素调用的函数。这个值是可选的。传递给函数的值一般是“this”值。如果此参数为空,则“undefined”将传递给描述所需currentValue的“this”值参数。当前元素索引是可选的。当前元素的索引值。arr是可选的。当前元素所属的数组对象。返回值:undefinedvarnumbers=[4,9,16,25];numbers.forEach(function(number,index){console.log(index+'--'+number);})//0--4//1--9//2--16//3--25(2)forEach()方法重构Array.prototype.myForEach=function(fun,){for(vari=0;i=18})console.log(result);//输出结果为:false(2)every()方法重构Array.prototype.myEvery=function(fun,obj){for(vari=0;i1;//短路原理},{name:'zhangsan'})//第二个对象exists当this指向这个对象时console.log(result);3.Array.prototype.some();(1)some()方法用于检测数组中的元素是否满足指定条件(由函数提供)some()方法会依次执行数组的每个元素:a.如果一个元素满足条件,则表达式返回*true*,其余元素将不再检查。b.如果没有满足条件的元素,则返回false。注意:some()不会检查空数组。some()不会改变原始数组。语法:array.some(function(currentValue,index,arr),thisValue)参数:参数说明function(currentValue,index,arr)必须的。函数,数组中的每个元素都会执行这个函数。功能参数如下表所示。这个值是可选的。执行回调时要使用的对象,传递给函数,并用作“this”的值。如果省略thisValue,则“this”的值为“undefined”并且描述currentValue的参数必须。当前元素的值索引是可选的。当前元素的索引值arr是可选的。当前元素所属的数组对象返回值:Boolean。如果数组中有满足条件的元素则返回真,否则返回假。//检查数组中是否有大于18的元素:varages=[32,33,16,40];varresult=ages.some(function(age){returnage>=18})console.log(result);//输出结果为:true(2)some()方法重构Array.prototype.mySome=function(fun,obj){for(vari=0;i1;},{name:'zhangsan'});console.log(result);4.Array.prototype.filter()(1)filter()方法创建一个新数组,其元素通过检查指定数组中所有符合条件的元素来检查。注意:filter()不会检查空数组。filter()不会改变原始数组。语法:array.filter(function(currentValue,index,arr),thisValue)参数:参数说明function(currentValue,index,arr)为必填项。函数,数组中的每个元素都会执行这个函数。功能参数如下表所示。这个值是可选的。执行回调时要使用的对象,传递给函数,并用作“this”的值。如果省略thisValue,则“this”的值为“undefined”并且描述currentValue的参数必须。当前元素的值索引是可选的。当前元素的索引值arr是可选的。当前元素所属的数组对象。返回值:返回一个包含所有满足条件的元素的数组。如果没有匹配的元素,则返回一个空数组。//返回数组*ages*中大于18的所有元素:varages=[32,33,16,40];varresult=ages.filter(function(age){returnage>=18})控制台。log(result);//输出结果为:[32,33,40](2)filter()方法重构Array.prototype.myFilter=function(fun,obj){varresult=[];for(vari=0;i2;},{name:'zhangsan'});控制台日志(结果);5.Array.prototype.map()(1)map()方法返回一个新数组,数组中的元素为原数组元素调用函数后处理后的值。map()方法按原始数组元素顺序依次处理元素。注意:map()不会检查空数组。map()不会改变原始数组。语法:array.map(function(currentValue,index,arr),thisValue)参数:参数说明function(currentValue,index,arr)必须的。函数,数组中的每个元素都会执行这个函数。功能参数如下表所示。这个值是可选的。执行回调时要使用的对象,传递给函数,并用作“this”的值。如果省略thisValue,或者传入null或undefined,则回调函数的this为全局对象。参数说明currentValue必须。当前元素的值索引是可选的。当前元素的索引值arr是可选的。当前元素所属的数组对象返回值:返回一个新的数组,数组中的元素为原数组元素调用函数后处理后的值。//返回一个数组,其元素是原始数组的平方根:varnumbers=[4,9,16,25];varresult=numbers.map(function(number){returnMath.sqrt(number)})console.log(result);//输出结果为:[2,3,4,5]Array.prototype.myMap=函数(乐趣,对象){varresult=[];for(vari=0;i