数组构造方法数组字面量leta=Array(6);console.log(a)//[<6emptyitems>]letb=[];b.length=6;console.log(b)//[<6emptyitems>]Array.of和Array.fromArray.of用于将参数依次转换为数组中的一个item,然后返回这个新数组,不管这个参数是数字还是其他什么Array.of(8.0);//[8]数组(8.0);//[空×8]Array.of(8.0,5);//[8,5]数组(8.0,5);//[8,5]Array.of('8');//["8"]数组('8');//["8"]Array.from(arrayLike[,mapFn[,thisArg]])arrayLike一个伪数组对象或要转换成数组的可迭代对象。mapFn是可选的。如果指定,将为新数组中的每个元素执行回调函数。thisArg可选。可选参数,执行回调函数mapFn时为该对象。Array.from从类似数组的可迭代对象创建一个新的数组实例。只要一个对象有一个迭代器,Array.from就可以把它变成一个数组(注意:它返回一个新的数组而不改变原来的对象)varobj={0:'a',1:'b',2:'c',长度:3};vararr=Array.from(obj,function(value,index){console.log(value,index,this,arguments.length)//a0{'0':'a','1':'b','2':'c',长度:3}2//b1{'0':'a','1':'b','2':'c',长度:3}2//c2{'0':'a','1':'b','2':'c',长度:3}2返回值.repeat(3)},obj)console.log(arr)//['aaa','bbb','ccc']带迭代器的对象还有String,Set,Map等,Array.from可以处理Array的判断。五种判断方式为truevara=[];//1.基于instanceofainstanceofArray;//2.基于constructora.constructor===Array;//3.基于Object.prototype.isPrototypeOfArray.prototype.isPrototypeOf(a);//4.基于getPrototypeOfObject.getPrototypeOf(a)===Array.prototype;//5.基于Object.prototype.toStringObject.prototype.toString.apply(a)==='[objectArray]';`Array.isArrayif(!Array.isArray){Array.isArray=function(arg){返回Object.prototype.toString.call(arg)==='[对象数组]';};}改变自身的方法是基于ES6的,可以改变自身值的方法有9个,分别是pop、push、reverse、shift、sort、splice、unshift,还有两个ES6新方法copyWithin和fillarray.copyWithin(target,start,end)copyWithin()方法用于将元素从数组的指定位置复制到数组的另一个指定位置。目标是必需的。复制到指定的目标索引位置。开始是可选的。元素复制的起始位置。结束是可选的。停止复制的索引位置(默认为array.length,第三个参数不写则默认为array.length)。如果是负值,则表示倒数。array.fill(value,start,end)fill()方法用于将数组的元素替换为固定值。值是必需的。填充值。开始是可选的。开始填补职位。结束是可选的。停止填充位置(默认为array.length)示例vararray=[1,2,3,4,5];vararray2=array.copyWithin(0,3);console.log(array===array2,array2);vara2=array.copyWithin(4,3)vara3=array.copyWithin(2,3)vara4=array.copyWithin(3,4,6)//填充方法vararray=[1,2,3,4,5];vararray2=array.fill(10,0,3);console.log(array===array2,array2);//true[10,10,10,4,5],可见数组范围[0,3]元素全部替换为10Leetcode算法题《合并两个有序数组》给你两个有序整数数组nums1和nums2,请将nums2合并为nums1为使nums1成为有序数组。另外两个整数m和n分别表示nums1和nums2中元素的个数注意:合并后的数组最终不应该被函数返回,而是存储在数组nums1中。为了解决这个问题,nums1的初始长度为m+n,其中前m个元素表示应该合并的元素,最后n个元素为0,应该被忽略。nums2的长度为n。输入:nums1=[1,2,3,0,0,0];m=3nums2=[2,5,6];n=3Output:[1,2,2,3,5,6]parsethis这道题不能开新数组,所以需要用自己改变的方法来完成这道题。首先,将nums2合并到nums1中。不开新阵法的话,否则过不去。其次,合并之后,nums1还是一个有序数组。这里也需要注意;另外,样本中的nums1和nums2的数字都是“2”,重复的需要合并进去。varmerge=function(nums1,m,nums2,n){nums1.splice(m)nums2.splice(n)nums1.push(...nums2)nums1.sort((a,b)=>a-b)};不改变自身的方法是基于ES7的,有9个不会改变自己的方法,分别是concat、join、slice、toString、toLocaleString、indexOf、lastIndexOf、toSource还没有形成标准,新的方法包括ES7。//concatletarr=[1,2,3]letarr2=arr.concat(4,[5],[6,7])控制台。log(arr2)//[1,2,3,4,5,6,7]console.log(arr)//[1,2,3]//切片array.slice(start,end)如果开始是负数,表示倒数console.log(arr.slice())//[1,2,3]console.log(arr.slice(0,1))//[1]console.log(arr)//[1,2,3]//toStringconsole.log(arr.toString())//"1,2,3"//toLocaleStringletarr3=[{a:1},2,"3",newDate()]console.log(arr3.toLocaleString())//[objectObject],2,3,2021/12/199:38:21AM//包含letarr4=[-0,1,2]console.log(arr4.includes(+0))//true,这是一个遗留的bug,includes不区分+0和-0letarr5=[NaN]console.log(arr5.includes(NaN))//true数组遍历基于ES6,不会自行改变。总共有12种遍历方法,分别是forEach、every、some、filter、map、reduce、reduceRight,以及ES6新方法entries、find、findIndex、keys、values。forEach将返回undefinedletarr=[1,2,3]letarr1=arr.map(i=>i+i)console.log(arr,arr1)//[1,2,3][2,4,6]//pre上次函数调用的返回值,或者初始值//cur当前正在处理的元素//当前处理元素的下标//调用reduce()方法的数组lets=arr.reduce(function(pre,val,index,arr){returnpre*val},1)//ES6更简洁arr.reduce((p,v)=>p*v);//24console.log(s)//6vararray=[1,3,5,7,8,9,10];functionf(value,index,array){返回值%2==0;//返回一个偶数}functionf2(value,index,array){returnvalue>20;//返回大于20的数字}console.log(array.find(f));//8console.log(array.find(f2));//undefinedconsole.log(array.findIndex(f));//4console.log(array.findIndex(f2));//-1//键方法[...Array(10).keys()];//[0,1,2,3,4,5,6,7,8,9][...newArray(10).keys()];//[0,1,2,3,4,5,6,7,8,9]//values方法,迭代器遍历letstrArr=['a','b','c']letiterator=strArr.values();console.log(iterator.next().value)//aconsole.log(iterator.next().value)//b
