【多维数组降维】

多维数组降维

//数组降维   面试出现频率  80%
var  arr  = [1,2,3,4,5,6,7,7,[1,1,3,4,5,6,7,[1,1,2,3,4,5]]];

function fun(arr){
// 两次打散数组    但只是 一次降维
     arr  = [].concat.apply([],arr); // ES6  -->  arr  =  [].concat(...arr)
  
     if(arr.some(   //如果 降维一次的数组   判断 是否 降维过的数组中  是否还包含数组 
     
         function(elem,i,arr){ //elem  为 数组中的每个 元素  i 为元素的下标  arr  为传入的数组
              //  判断 传入的arr 中是否包含 子数组   返回值为 true  ->代表有  否则false  ->没有
         return  Array.isArray(elem)}
         
         )){//arguments。callee()   是函数自身调用自身  即  递归 的经典使用    但是在ES5中  不推荐使用
            arr =  arguments.callee(arr);
        }
        //  将降维过的 数组   返回 
        return arr;
    }
    //调用函数  传入参数arr   排序  去重   --》测试    注意 :sort 只能按字符串升序排列
var  newarr = fun(arr).sort(function(a,b){return a-b}) ;
//详情 查看数组去重的方法三  
console.log([...new Set(newarr)])//  [1, 2, 3, 4, 5, 6, 7]  

/*
知识点  整理:  多维数组
 1.  二维数组   什么是二维数组 ?
            数组中的子数组
           用法和普通数组 一样
    如:
     for(var r = 0;r<arr.length;r++){
        for(var  c = 0;c<arr[r].length;c++){
         arr[r][c] //当前元素
   }
} 
2.数组的API  //ES6  
  some       包含  
  filter     过滤
  every      每个
  concat    将数组连接在一起    并 可以将数组打散
  apply  call  bind  三者的区别
  Set 对象   
*/

发布了6 篇原创文章 · 获赞 3 · 访问量 325

猜你喜欢

转载自blog.csdn.net/Fahgashdjhas/article/details/103294356