• js数组扁平化


    看到一个有趣的题目:

    var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
    
    一个多维数组,要求扁平化,去重且升序,你会怎么做?

    我们先从第一步来吧, 实现扁平化:

    方法一:
    
    像这种多维数组, 需要循环判断, 因此用while, 不用if(if是一次判断)
    
    flatten = (arr) => {
      while(arr.some(item => Array.isArray(item))){
        arr =  [].concat.apply([],arr);
      }
      return arr;
    }
    
    flatten(arr) 
    // [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]
    
    方法二:
    比较hack的方式, 只适用于纯数字
    arr.toString().split(',').map(itm=> parseInt(itm))
    //  [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]
    
    最佳实践方法三:
      lodash 的 flatten, flattenDeep 方法。 当然, 如果是简单的二维, 那我们用es6扩展运算符或concat就可以搞定,比如: var arr = [1, [2, 3]]; [].concat.apply([],arr); // [1, 2, 3] 或 [].concat(...arr) // [1, 2, 3]

    第二部, 去重且升序:

    这步相对于第一步来说应该很简单了,一维数组去重方式好多,

    sortnum = (a, b) => {
      return a - b
    }
    var arr1 = [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]
    
    new Set(arr1.sort(sortnum))   // 先排序再去重
  • 相关阅读:
    Codeigniter 控制器的继承问题
    laravel 安装
    js preventDefault() 方法
    jquery 获取$("#id").text()里面的值 需要进行去空格去换行符操作
    HDU_1394_线段树
    Codeforces_723_D
    Codeforces_723_C
    Codeforces_723_B
    Codeforces_723_A
    HDU_4456_二维树状数组
  • 原文地址:https://www.cnblogs.com/aloehui/p/10455716.html
Copyright © 2020-2023  润新知