其他分享
首页 > 其他分享> > 前端关于这些问题你都会了吗?(二)

前端关于这些问题你都会了吗?(二)

作者:互联网

第 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