数组展平(也称数组降维)MDN:flat()方法会按照指定的深度递归遍历数组,将所有的元素合并到一起遍历的子数组合并成一个新的数组并返回。consttest=["a",["b","c"],["d",["e",["f"]],"g"]]//不传参数时,默认为flatLayertest.flat()//["a","b","c","d",["e",["f"]],"g"]//输入一个整型参数,整型即平层数test.flat(2)//["a","b","c","d","e","f"],"g"]//无限关键字作为参数使用时,无论嵌套多少层,都会转化为一维数组test.flat(Infinity)//["a","b","c","d","e","f","g"]//Integer<=0会返回原数组,不会展平test.flat(0)test.flat(-10)//["a",["b","c"],["d",["e",["f"]],"g"]]//如果原数组有空格,flat()方法会跳过空格。["a","b","c","d",,].flat()//["a","b","c","d"]Array.prototype.flat()特性总结:Array.prototype.flat()用于将嵌套数组展平为一维数组。此方法返回一个新数组,对原始数据没有影响。不传参数时,默认展平一层,可以传入一个整数表示展平的层数。传递<=0的整数将返回原始数组,而不是展平的。当使用Infinity关键字作为参数时,无论嵌套多少层,都会转为一维数组。如果原始数组有空间,Array.prototype.flat()将跳过空间。方法一:使用reduce方法一次全部展平:functionflattenDeep(arr){returnArray.isArray(arr)?arr.reduce((acc,cur)=>[...acc,...flattenDeep(cur)],[]):[arr]}//测试vartest=["a",["b","c"],["d",["e",["f"]],"g"]]flattenDeep(test)//["a","b","c","d","e","f","g"]实现flat函数:functionflat(arr,depth=1){returndepth>0?arr.reduce((acc,cur)=>{if(Array.isArray(cur)){return[...acc,...flat(cur,depth-1)]}return[...acc,cur]},[]):arr}//测试vartest=["a",["b","c"],["d",["e",["f"]],"g"]]//不传参数时,默认拉平一个平面层。flat(test)//["a","b","c","d",["e",["f"]],"g"]//输入一个整数参数,整数为numberofflattenedlayersflat(test,2)//["a","b","c","d","e",["f"],"g"]//当Infinity关键字为作为参数,不管嵌套多少层都会转为一维Arrayflat(test,Infinity)//["a","b","c","d","e","f","g"]//integer<=0会返回原始Array,未展平flat(test,0)flat(test,-10)//["a",["b","c"],["d",["e",["f"]],"g"]];//如果原数组有空格,flat()方法会跳过空格vararr=["a","b","c","d",,]flat(arr)//["a","b","c","d"]方法二:堆叠一次DimensionalityreductionallfunctionflattenDeep(arr){constresult=[]//将数组元素复制到栈中,直接赋值会改变原数组conststack=[...arr]//如果栈不为空,循环while(stack.length!==0){constval=stack.pop()if(Array.isArray(val)){//如果数组再次入栈,又一层stack.push(...val)}else{//如果不是数组,则通过头部插值的方式插入结果数组result.unshift(val)}}returnresult}//测试vartest=["a",["b","c"],["d",["e",["f"]],"g"]]flattenDeep(动物)//["a","b","c","d","e","f","g"]数组去重方法一:Set(ES6)functionunique(arr){returnArray.from(newSet(arr))}//或varunique=arr=>[...newSet(arr)]//testvararr=[1,2,2,3]unique(arr);//[1,2,3]方法二:reducefunctionunique(arr){returnarr.sort().reduce((acc,cur)=>{if(acc.length===0||acc[acc.length-1]!==cur){acc.push(cur);}returnacc},[])};//testvararr=[1,2,2,3]独曲e(arr);//[1,2,3]方法三:filterfunctionunique(arr){returnarr.filter((element,index,array)=>{returnarray.indexOf(element)===index})}///测试vararr=[1,2,2,3]unique(arr);//[1,2,3]
