前端关于这些问题你都会了吗?(二)
作者:互联网
第 1 题:(携程)算法手写题
已知如下数组:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; //第一种实现方法 //1.数组扁平化 //2.数组去重 //3.数组 排序 function BPH(arr){ let temp = []; let temp2 = []; for(let i=0;i<arr.length;i++){ if(Array.isArray(arr[i])){ temp = [...arr[i]]; temp2 = temp2.concat(temp) }else{ temp2 = temp2.concat(arr[i]) } } if(temp.length == 0){ return arr; }else{ return BPH(temp2) } } let aa = BPH(arr); let cc = [...new Set(aa)]; function arrSort(a,b){ if(a<b){ return -1; }else{ return 1 } } let dd = cc.sort(arrSort);
//第二种实现方法 [...new Set(arr.flat(Infinity))].sort((a,b)=>{return a-b;})
讲解一点关于flat方法
Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维数组。该方法返回一个新数组,对原数据没有影响。flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
标签:flat,arr,12,前端,问题,let,关于,数组,拉平 来源: https://www.cnblogs.com/advanceCabbage/p/12494571.html