scriptOJ33

题目描述:
编写一个 JavaScript 函数,接受一个仅包含数字的 多维数组 ,返回拍平以后的结果。例如传入:[1, [[2], 3, 4], 5],返回 [1, 2, 3, 4, 5]。(本题来源:阿里巴巴前端笔试题)
思路:
这道题我的想法是用回调,将数组里类型不是number的数接着作为参数传到函数中,将其转化成相应的数字,具体的做法是将数组转化为字符串,用字符串把每一个数字拼接起来,最后在分割成数组,代码就是下面这个样子:

const flatten = (arr) => {
  let res=""
  for(let i=0;i<arr.length;i++){
    if(typeof(arr[i])!="number"){
      let j=flatten(arr[i])
      j=j.join("_")//可以用任意非数字来连接,即"_"可以用任意非数字字符来替代
      res+=(j+"_");
    }
    else{
      res+=arr[i]+"_"
    }   
  }
  res=res.split("_")
  for(let j=0;j<res.length;j++){
    res[j]=parseInt(res[j])//因为原类型为string,需要转化为number
  }
  res.pop()//用split分割的话因为结尾也有一个"_",结尾会多一个"NaN"项,要移除
  return res;
}

代码通过,再来看看大神解法

const flatten = (arr) =>
arr.join().split(',').map(num=>parseInt(num)).filter(num=>!isNaN(num));

思路是类似的,先将数组转化为字符,然后分割,转number类型,过滤掉NaN
但看起来就十分舒服了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值