js实现数组扁平化

js实现数组扁平化

数组的扁平化,就是将一个嵌套多层的数组array(嵌套可以是任何层数)转换为只有一层的额数组。
如:
var arr = [3,5,[7,3,[22,11],6],4];
//扁平化后:[3, 5, 7, 3, 22, 11, 6, 4]

  • 法一 递归实现
  var arr = [3,5,[7,3,[22,11],6],4];
        //法一 递归
        function flatten1(arr) {
            var newArr = [];
            for(var i = 0; i < arr.length; i++) {
               //if(Array.isArray(arr[i])) { 或
                if(typeof arr[i] == 'object') {
                 newArr =  newArr.concat(arguments.callee(arr[i]));
                 //或 newArr = newArr.concat(flatten1(arr[i]));
               } else {
                  newArr.push(arr[i]);
               }
            }
            return newArr;
        }
        console.log(flatten1(arr));// [3, 5, 7, 3, 22, 11, 6, 4]
  • 法二 reduce方法
 //法二  reduce方法
       function flatten2(arr) {
          return arr.reduce(function(prev, item) {
            return prev.concat(typeof item == 'object' ? flatten2(item) : item);
          }, []);
       }
      console.log(flatten2(arr));
  • 法三 toString方法
//法三 toString方法
      //如果数组的元素都是数字,那么我们可以考虑使用 toString 方法 
      function flatten3(arr) {
        return arr.toString().split(',').map(function(item) { //toString之后再split转成数组,并将其转换回数字:
           return +item; //将字符串转为数字
        })
      }
      console.log(flatten3(arr));
  • 法三 ES6扩展运算符
 //法四 ES6扩展运算符
      function flatten4(arr) {
        while(arr.some(item =>Array.isArray(item))){
            arr = [].concat(...arr);
        }
        return arr;
      }
      flatten4(arr);
  • 由于扩展运算符一次只能展开一层数组:
var arr = [1, [2, [3, 4]]];
console.log([].concat(...arr)); // [1, 2, [3, 4]]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Web2 最直接的办法:F12打开控制台,ctrl+f搜索flag关键字得到flag:KEY{Web-2-bugK...
    皮一下怎么了阅读 8,144评论 1 4
  • 掌握尺寸、位置、重叠的原理,先画出球的大小 找到光源,以光源点的投影来描球体上面的阴影 如果想让两个球体分离,可以...
    Yuan_Jie阅读 1,768评论 0 0
  • 本周安排满满,西安出差三天,办公室两天,易效能二阶2天。非常充实的一周! 早起基本没有问题,出现啦一次严重的失眠问...
    betterlbq阅读 890评论 0 0
  • *刑侦AU *CP:XB,AL,PU *OOC和BUG都是我的 千里缉凶【下】 00 我想成为荆棘,却又不想伤害他...
    Danny_Lynn阅读 4,957评论 0 0
  • 作为老师也作为家长,我们经常会批评学生或者孩子,但却往往有一个感觉,就是在你吐沫横飞说了半天后,他们往往没什...
    张布点儿阅读 1,358评论 0 0