总结js数组、对象、Map、Set常用操作1:遍历数组常用操作时,break只能用在for...of..forEach中无效break,map,find等也可以在swich中使用1.循环遍历相关:(1)使用for...of只能遍历数组,读取数组的元素,不能改变原数组,让arr=[2,3,4]for(letitemofarr){console.log("everyitem=",item)//循环打印2,3,4}(2)使用for...in遍历数组底部标记索引,也可以遍历对象的keyletarr=[2,3,4]for(letiteminarr){console.log("everyitempos=",item)//循环打印0,1,2}letobj={"a":1,"b":2}for(letiteminobj){console.log("everyitemkey=",item)//循环打印a,b}(2).forEach()方法对数组的每个元素执行一次给定的函数。但是不会改变原来的数组,即使有return也不影响原来的数组,只是再循环一遍letarr=[1,2,3,4]arr.forEach((item,index,srcArray)=>{item=item*2})console.log("arr=",JSON.stringify(arr))//还是[1,2,3,4]//如果要改,可以这么写像这样:让arr=[1,2,3,4]arr.forEach((item,index,srcArray)=>{arr[index]=item*2})//arr=[2,4,6,8](3)map()map遍历,是return,返回一个新数组letarr=[1,2,3,4]letnewArr=arr.map((item,index,srcArray)=>{returnitem*2})console.log("arrayMaparr=",JSON.stringify(newArr))//[2,4,6,8]//不需要改变原来的数组letarr=[1,2,3,4]arr.map((item,index,srcArray)=>{item=item*2})console.log("arrayMaparr=",JSON.stringify(arr))//[1,2,3,4]//使用下标赋值改变原数组letarr=[1,2,3,4]arr.map((item,index,srcArray)=>{arr[index]=item*2})console.log("arrayMaparr=",JSON.stringify(arr))//[2,4,6,8](4)arr.keys()遍历数组索引键letarr=[1,2,3,4]for(letitemofarr.keys()){console.log("arrayKeysitem=",item)}//arrayKeysitem=0//arrayKeysitem=1//arrayKeysitem=2//arrayKeysitem=3(5)arr.values()遍历数组索引值letarr=[1,2,3,4]for(letitemofarr.values()){console.log("arrayValuesitem=",item)}//arrayValuesitem=1//arrayValuesitem=2//arrayValuesitem=3//arrayValuesitem=4(6)arr.entries()返回一个新的ArrayIterator对象,其中包含数组中每个索引的键/值对letarr=[1,2,3,4]for(letitemofarr.entries()){console.log("arrayEntriesitem=",item)}//数组条目item=[0,1]//数组条目item=[1,2]//arrayEntriesitem=[2,3]//arrayEntriesitem=[3,4](7)遍历对象数组,可以直接操作改变原数组letarr=[{"id":1,"name":"a"},{"id":2,"name":"b"}]for(letitemofarr){item.id+=1}console.log("arrayValueOfObjectarr=",arr)//[{id:2,name:'a'},{id:3,name:'b'}]2.满足条件相关(1)arr.filter(callback): 过滤满足条件的元素,返回,返回一个新的数组letarr=[1,2,3,4]letnewArr=arr.filter((item,index,srcArray)=>{returnitem%2===0})console.log("arrayFilterarr=",JSON.stringify(newArr))//[2,4](2)arr.every()测试数组中的所有项是否满足条件,满足则返回true,否则返回false,同return,letarr=[1,2,3,4]letret=arr.every((item,index,srcArray)=>{returnitem>0})console.log("arrayEveryret=",ret)//true(3)arr.some()测试数组中是否有满足条件的项,返回true,否则返回falseletarr=[1,2,3,4]letret=arr.some((item,index,srcArray)=>{returnitem===2})console.log("arraySomeret=",ret)//true(4)arr.find()查找第一项满足条件的数组否则元素的值未定义。withreturnletarr=[1,2,3,4]letretItem=arr.find((item,index,srcArray)=>{returnitem===2})console.log("arrayFindretItem=",retItem)//2(5)arr.findIndex()查找数组中第一个满足条件的元素的值。否则返回-1,returnletarr=[1,2,3,4]letretItemIndex=arr.findIndex((item,index,srcArray)=>{returnitem===2})console.log("arrayFindIndexretItem=",retItemIndex)//1arr.reduce(callback,initialValue)累加器累加数组中的所有项,returnletarr=[1,2,3,4]letinitialValue=10letresult=arr.reduce((previousValue,currentValue,index,srcArray)=>{returnpreviousValue+currentValue},initialValue)console.log("arrayReduceresult=",result)//20个参数:callback:previousValue必填——最后一次回调调用返回的值Value,或提供的初始值(initialValue) currentValuerequired--数组中当前正在处理的数组项 indexoptional--当前数组项在数组中的索引值 arrayoptional--原始数组 initialValue:optional--初始值 执行方式:回调函数第一次执行时,preValue和curValue可以是一个值,如果我nitialValue在调用reduce()时提供,那么第一个preValue等于initialValue,curValue等于数组中的第一个值;如果不提供initialValue,那么preValue等于数组中的第一个值还可以使用reduce进行一些高级操作1.计算数组中每个元素出现的次数2.数组去重3.转换多维arraystoone-dimensionalarr.splice(i,n)splice()方法用于插入、删除或替换数组的元素。如果它被删除,将返回一个已删除元素的数组。(1)删除从i(索引值)开始的n个元素。返回值是已删除元素的列表。此方法会改变原始数组。letarr=[1,2,3,4]letdeleteItems=arr.splice(2,1)console.log("arraySplicearr=",arr)//[1,2,4]console.log("arraySplicedeleteItems=",deleteItems)//[3](2)拼接可以用来交换数组中两个元素的位置leta=[1,2,3]a[2]=a.splice(1,1,a[2])[0]//a=[1,3,2]//a.splice(1,1,a[2])[0]把2的位置放到1的位置,返回第1位数据的数组arr.slice()方法返回一个新的数组对象,它是由begin和end(包括begin,不包括end)确定的原始数组的浅拷贝。原数组不会改变。Array.from()方法从类数组或可迭代对象创建一个新的数组实例的浅表副本arr.fill(target,start,end)用给定的值填充一个数组,ps:将改变参数原数组 :target--要填充的元素 start--开始填充的位置-索引 end-结束填充的位置-索引(不包括该位置)Array.unshift()将原来的插入到数组前面index=0处,返回值为添加的数组长度letarr=[1,2,3,4,5]console.log(arr.unshift(2))//6console.log(arr)//[2,1,2,3,4,5]8.arr.includes(val)数组是否包含某个值arr.join()——生成以字符分隔的字符括号中的符号String,不改变原数组,追加arr.pop()后添加arr.pop(),调查arr.shift()前删除arr.unshift(),连接arr前删除arr.concat()。sort()对数组进行排序,返回值为排序后的数组,排序依据默认最左边的数,不是通过arr.reverse()按数的大小取反的...2:object对象为{}1。对象遍历(一)Object.entries(obj)返回给定对象自身可枚举属性的键值对数组letobj={"id":1,"name":"a","score":99,"class":"1-1"}for(let[key,val]ofObject.entries(obj)){console.log("objForkey=",key)console.log("objForval=",val)}//objForkey=id//objForval=1//objForkey=name//objForval=a//objForkey=score//objForval=99//objForkey=class//objForval=1-1(2)Object.keys(obj)返回对象键数组,属性名在数组中的顺序和正常cycle遍历对象时返回的顺序相同(三)4.Object.values()返回给定对象本身的可枚举属性的值数组2.Object.is()方法判断两个值是否存在是相同的值3.Object.assign()方法用于将一个或多个源对象的所有可枚举属性的值赋值给一个目标对象。它将返回目标对象。
