1.创建一个数组字面量newArray()Array.of()Array.from()1。字面量letarr1=[1,2,3]隐式creation2.newArray()letarr=newArray(1);//[未定义]arr[1]=5console.log(arr);//[undefined,5]letarr2=newArray(1,2)//[1,2]Array()只有一个数,表示数组的长度newArray()不能创建只有一个数的数组3.Array.of()letarr=Array.of(1)//[1]letarr2=Array.of({a:1},2,["f"])//[{a:1},2,["f"]]与newArray()相比,Array.of()可以创建单元素数组4.Array.from()参数:伪数组或可迭代对象mapFnthisAryleta={0:"a",2:1,length:3}letarr1=Array.from(a)//["a",undefined,1]letb="123"letarr2=Array.from(b)//["1","2","3"]可以将伪数组对象和可迭代对象转换为数组下标带有数字和长度属性的ObjectSet,Map2.判断数组instanceofarr.__proto__constructortoStringisArrayletarr=[1,2,3]//判断arrinstanceofArray//trueArr.__proto__===Array.prototype//trueArr.constructor===Array//trueObject.prototype.toString.call(arr)=="[objectArray]"//trueArray.isArray(arr)//true//推荐方法({}).toSring.call(arr)==="[objectArray]“3。array方法在不改变原数组的情况下改变原数组。ForEach和map遍历数组,回调函数的参数存在。绑定对象的方法实际上就是将数组的每一项的值、下标和整个数组作为调用指定对象或窗口的参数进行绑定,调用时对参数进行浅拷贝,因此,当原数组中的元素是原类型,这些方法的直观感受是原数组没有改变,但是会改变对象类型,即复制栈指针,重用堆。也因为这些方法的第一个参数是一个Callback函数,这个回调函数实际上是在一个for循环中执行的。如果想在里面实现异步操作,在执行语句中加入awaitcallback之前加入async是没有意义的。就forEach而言,整体的回调函数应该在forEach内部之前有await才能正确停止迭代1.改变原来的数组push()pop()unshift()shift()letarr=[1,2,3]leta=arr.push([4],[5])//5console.log(arr);//[1,2,3,[4],[5]]letb=arr.pop()//[5]console.log(arr)//[1,2,3,[4]]推送和pop在尾部操作,unshift和shift在头部操作。push操作返回操作后的长度,pop返回未移位元素的单次插入不同于统一插入顺序sort()reverse()letarr=["coser","Alice","bob",5,66]leta=arr.sort()//[5,66,"Alice","bob","coser"]console.log(arr);//[5,66,"Alice","bob"","coser"]sort对数组进行排序,默认按首字母排序sort返回排序后的数组letarr=[37,12,1,5,66]leta=arr.sort((n1,n2)=>n1-n2)//[1,5,12,37,66]console.log(arr);//[1,5,12,37,66]在sort中加入比较函数,可以对整个倒序排序数组并返回反转数组splice(start,n,param1,param2...)letarr=[1,2,3]leta=arr.拼接(0,2,'a')//[1,2]console.log(arr);//["a",3]有以下参数时被替换,返回删除的元素数组。没有参数时,删除一段elementstart。负copyWithin()fill()参数:targetstartendletarr=[1,2,3,4,5]leta=arr.copyWithin(1,2,4)//[1,3,4,4,5]console.log(arr);[1,3,4,4,5]第一位是初始粘贴的位置,最后两位是原始数组的副本。从目标粘贴复制的值letarr=[1,2,3,4,5]leta=arr.fill(1,2,4)//[1,2,1,1,5]console.log(arr);//[1,2,1,1,5]将第一个参数替换为选中范围类似splice,单函数forEach(callback)回调参数:valueindexarrletarr=[1,2,3]arr.forEach((value)=>{value=value+1;})//undefinedconsole.log(arr);//[1,2,3]修改数组中原有类型,原有数组不变forEach没有返回值letarr=[1,2,3]arr.forEach((value,index,arr)=>{arr[index]+=1})console.log(arr);//[2,3,4]letarr=[{name:"张三",age:17},{name:"李四",age:20}]arr.forEach((value,index,arr)=>{if(value.age<18){arr.splice(index,1)}})console.log(arr);//[{name:"李四",age:20}]修改引用类型会修改原数组2.原数组不会改变reduce(callback,initialValue)reduceRight()callback:AccumulatorCurrentValueCurrentIndexSourceArrayinitialValue:作为回调的第一个参数值,如果没有,则以数组第一项作为初始值letarr=[1,2,2,3,3,3,5,7,9,2]leta=arr.reduce((acc,val)=>{if(valinacc)acc[val]++elseacc[val]=1returnacc},{})控制台.log(a);//{1:1,2:3,3:3,5:1,7:1,9:1}统计数组通过累加值的特性,可以做很多对数组的处理,去重,扁平化等。reduceRight的操作和reduce一样,都是从右边开始遍历join()letarr=[1,2,3]arr.join()//"1,2,3"默认以","分隔拼接arr.join("")//"123"arr.join("-")//"1-2-3"console.log(arr);//[1,2,3]加入以某个字符分隔的数组,将数组的每个元素拼接成一个字符串,并将拆分后的字符串返回数组中以原字符串的字符分隔,被分割后的字符串消失转换成数组,join会加上concat()letarr=[1,2,3]leta=arr.concat([4,[5]],[6])//[1,2,3,4,[5],6]console.log(arr);//[1,2,3]相比push,concat会压平一个数组slice(start,end)letarr=[1,2,3]leta=arr.slice(-2,-1)//[2]console.log(arr);//[1,2,3]类似于字符串操作indexOf()lastIndexOf()includes()letarr=[1,2,3]leta=arr.indexOf(3,2)//2类似于字符串,第二个参数为起始位置,成功返回索引,否则返回-1。lastIndexOf()反向搜索包含类似于一个字符串,存在returntruefind(callback)findIndex(callback)letarr=[1,2,3,"5",89]leta=arr.find((value,index,arr)=>{returnvalue>3})//"5"console.log(arr);//[1,2,3,"5",89]find返回第一个符合条件的值,findIndex返回第一个符合条件的索引filter(callback)map(callback)letarr=[1,2,3,"5",89]让a=arr。filter((value,index,arr)=>{returnvalue>3})//["5",89]console.log(arr);//[1,2,3,"5",89]过滤器输出所有符合条件的元素并返回一个新数组letarr=[1,2,3,"5",89]leta=arr.map((value,index,arr)=>{returnvalue=1+value})//[2,3,4,"15",90]console.log(arr);//[1,2,3,"5",89]map与forEach相比,不改变原数组,有它自己的返回值every(callback)some(callback)letarr=[1,2,3,"5",89]leta=arr.every((value,index,arr)=>{returnarr[index]>0})//trueevery遍历数组中的元素,如果都满足条件,就返回truesome,只要有满足条件的就返回truesomereturntruekeys()values()entries()letarr=[1,2,3,"5",89]leta=arr.keys()for(letkeyofa){console.log(key);}//01234获取所有索引letarr=[1,2,3,"5",89]让a=arr。values()for(letkeyofa){console.log(key);}//123"5"89得到所有的值letarr=[1,2,3,"5",89]leta=arr.entries()for(letkeyofa){console.log(key);}//[0,1][1,2][2,3][3,"5"][4,89]获取所有键值对flat(depth)flatMap(callback)letarr=[1,2,3,[4,[5]]]leta=arr.flat(3)console.log(arr);展平数组Letarr1=["it'sSunnyin","","California"]arr1.map(x=>x.split(""));//[["it's","Sunny","in"],[""],["California"]]arr1.flatMap(x=>x.split(""));//["it's","Sunny","in","","California"]flatMap会执行一次flat(1)对比map,将数组展平到一个深度
