JavaScript

数组扁平化

普通的递归

var a = [1, [2, [3, 4, 5]]];
   function flatten(arr){
       let res=[];
       for(let i=0;i<arr.length;i++){
           if(Array.isArray(arr[i])){
               res=res.concat(flatten(arr[i]))
           }else{
               res.push(arr[i])
           }
       }
       return res
   }
   flatten(a)  //[1, 2, 3, 4, 5]

reduce函数迭代

var arr = [1, [2, [3, 4]]];
   function flatten(arr){
       return arr.reduce(function(prev,next){
           return prev.concat(Array.isArray(next) ? flatten(next) :next)
       },[])
   }
   flatten(arr) //[1,2,3,4]

扩展运算符

var arr = [1, [2, [3, 4]]];
  function flatten(arr){
      while(arr.some(item=>Array.isArray(item))){
          arr=[].concat(...arr)
      }
      return arr
  }
  flatten(arr)    //[1, 2, 3, 4]
数组的方法:some
  • some()方法用于检测数组中的元素是否满足指定条件(函数提供),会依次执行数组中的每一个元素。

  • some()不会检测空数组,不会改变原始数组(和map类似)

  • 语法:arr.some(function(currentValue,index,arr){})

    • currentValue:必须,当前元素的值;index:可选,当前元素的索引值;arr:可选,当前元素属于的数组对象
    • 返回值:Boolean,数组中有元素满足条件返回true,否则返回false
     var arr=[1,2,3]
       arr.some(item=>{return item >1})  //true
       arr.some(item=>{return item >3})  //false
    

split和toString共同处理

var arr = [1, [2, [3, 4]]];
  function flatten(arr){
      return arr.toString().split(',')
  }
  flatten(arr)  //["1", "2", "3", "4"]

调用ES6的flat

var arr = [1, [2, [3, 4]]];
  function flatten(arr){
      return arr.flat(Infinity)
  }
  flatten(arr)   //[1, 2, 3, 4]
ES6的flat方法
  • 语法:arr.flat([depth])
  • depth:表示可以传递数组的深度(默认不填,数值是1);也可以天Infinity,代表无论多少层都能展开

正则和JSON方法共同处理

let arr = [1, [2, [3, [4, 5]]], 6];
  function flatten(arr) {
      let str = JSON.stringify(arr);
      str = str.replace(/(\[|\])/g, '');
      str = '[' + str + ']';
      return JSON.parse(str);
  }
  flatten(arr)   // [1, 2, 3, 4, 5, 6]
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值