详解JS数组API方法重构

【详解JS数组API方法重构】1、在JS中什么叫数组:数组是数据的有序集合 , 每个值叫做一个元素 , 简称元 , 而每个元素在数组中有一个位置 , 以数字表示 , 称为索引 , 从0开始 。 js的数组是无类型的 , 数组元素可以是任意类型 , 同一个数组中的不同元素可能是对象或数组 。 数组元素的索引不一定要连续 , 元素之间可以有空隙 , 叫做稀疏数组。 每个数组都具有一个length属性 。 针对非稀疏数组 , length属性就是数组元素的个数 , 针对稀疏数组 , 元素的length属性比所有元素的索引要大 。 2、数组的构建方式1)、字面量的创建;var arr=[ ];2)、构造函数创建;var arr=new Array();如果通过这个方式创建数组 , 参数仅有一个时 , 且这个参数是正整数的时候 , 不能是负数或者小数 , 则表示创建一个具备该正整数长度的数组 , 里面有这个长度若干个空元素 , 如果不是数值 , 这个数据就会作为该数组的第零个元素 , 长度为13 JS数组的特点;1)arr.length 数组的长度 , 元素的个数 , 长度可被修改 , 最大下标为长度减1 , 仅记录下标的个数 , 不包含属性的数量2)arr[arr.length]=20 , 在数组最尾部添加一个元素3)在对象中属性名填入任何内容都会隐式转换成字符 , 在数组中所有的下标都会隐式转换成number(NaN) , 不能转换的就会默认添加为数组的属性名4)数组不可以用点语法获取下标变量 , 但是可以用点语法获取属性5)当给数组添加键值对的时候 , 数组长度并不会改变 , 调用的时候用点语法外汇经纪商对比4:数组的API;总的来说数组的API有以下几个 , 那下面小编就介绍几种在JS中经常用到的API和数组方法重构(其中arr参数表示为数组 , item参数表示为元素 , index为索引);push()+pop(), shift()+unshift(), forEach(), map(), some(), every(), filter(), reduce()+reduceRight(), indexOf()+lastIndexOf(),join(), sort(), slice(), splice(), concat(), reverse(), Array.form(), Array.of(), find()+findIndex(), entries()+keys()+values(), includes()1;push , unshift , pop , shift1)push;在数组尾部添加一个或者多个元素 , 并且返回新数组的长度重构push;(应用了参数列表 , 低版本ie不兼容)function pushs(arr){for(var i=0,arLength=arr.length;i//在这里将原数组的长度赋值给变量固定 , 因为随着添加 , arr的长度也会变大arr[arLength + i]=arguments[i+1];//在arr后面添加要添加的元素}return arr.length;//返回新数组的长度}2)unshift:在数组的头部增加一个或者多个元素 , 并且返回新数组的长度重构unshiet;(应用了参数列表 , 低版本ie不兼容)function unshifts(arr){var arr1=[];//为了获取原数组的开始值for(var i=arguments.length-1;i// arr1[i]=arr[i-arguments.length-1];//分开写就不是一个整体了 。 所以整出来的数是undefined;arr1[i]=arr[i-(arguments.length-1)];}for(var j=0;jarr1[j]=arguments[j+1];//将要添加的元素添加在新数组的最前面}return arr1.length;//返回新数组的长度}3)pop; 删除数组最后一个元素 , 并且返回被删除的数值重构pop;function pops(arr){var item=arr[arr.length-1];//将数组最后一个元素保存arr.length--return item//返回被删除的元素}案例:清空数组这样写 , i会不断增大 , length会不断减小 , 他们会相遇 , 所以不会全部删除这样写并不能让数组清空for(var i=0;iarr.pop() }这样写元素全部删除第一种方法:清空元素var len=arr.length //先把length固定起来 , 数组在怎么变他都不会变for(var i=0;iarr.pop()}console.log(arr)第二种方法:清空元素for(var i=1;iarr.pop()}第三种方法:清空元素while (arr.length>0) {arr.pop()}console.log(arr)4)shift; 删除头部第一个元素 , 并且返回被删除的元素重构shift;function shifts(arr){var item=arr[0]//保存数组第一个元素for(i=0;iarr[i]=arr[i+1];//将数组元素都往前移一位}arr.length--;//删除数组最后一个元素 , 不进行这步的话数组最后一个元素还存在并为undefinedreturn item;//返回被删除的长度}eg:var arr=[1,2,3,4,5];var arr1=arr.push("s",6);var arr2=arr.unshift("a",10);var arr3=arr.pop();var arr4=arr.shift();console.log(arr1,arr2,arr3,arr4);//7 9 6 "a"//在这里 , arr1和arr2返回新数组的长度 , arr3和arr4返回被删除的元素2;concat和join 数组的合并1)concat 。 返回一个新数组 , 原来的数组不变化var arr=arr1.concat(arr2,0,[“a”,“b”],-1);如果直接使用 , 相当于复制 arr1=arr.concat();重构concat;function concats(arr,arr1,arr2,item){arr=[];//为返回新数组做准备for(i=0;iarr[i]=arr1[i];}for(j=0;jarr[arr1.length+j]=arr2[j];}//遍历数组arr1和arr2.arr[arr1.length+arr2.length]=item;//在已经将数组添加形成的arr数组 , 在其后面再拼接元素return arr;//返回拼接形成的新数组}2)join;返回指定的字符连接形成的新字符串;如;arr=[1,2,3,4,5]var str=arr.join("|"),默认为逗号 1|2|3|4|5;重构join;function joins(arr,item){str="";//为返回新字符串做准备if(item===undefined) item=","//用户未加item时 , 默认为逗号for(i=0;iif(arr[i]===arr[arr.length-1]){str+=toString(arr[i]);//将数组最后一个元素的连接符号去掉}else{str+=toString(arr[i])+"item"'//将数组元素转化为字符串}}return str;//返回新字符串}3 splice;插入 , 删除 , 替换 , 返回被删除的元素组成的新数组;arr.splice(从什么位置开始 可为负值表示由后向前 , 删除几个 , 替换的元素(一个或者多个))var arr1=arr.splice() 这样会将arr数组清空返回给arr1参数个数:arr.splice(从什么位置开始 支持负数 , 删除几个 , 替换的元素)arr.splice(1) 一个参数时从索引1开始截取到尾部arr.splice(1,3) 从索引1开始 , 删除3个arr.splice(1,3,6) 从索引1开始删除3个 , 并将6插入索引1中arr.splice(1,3,6,4,8,9) 从索引1开始删除3个 , 并将6之后的元素插入索引1开始的位置 。 重构splice方法//arr 为数组参数 , index为索引(可以为负) , arrNum为要删除的元素个数 , 后面可以跟需要添加的新元素 。 function splices(arr, index, arrNum) {//获取需要添加的元素个数(如果有的话)var arrArgumentsNum = arguments.length - 3;//设置delArr , 用于以数组形式返回被删除的元素var delArr = [];//简单的判断 , 防止函数调用失败if (arr.length