[优化]Steamroller-freecodecamp算法题目

晚上在medium看到一篇关于找工作的文章,里面提到一个面试题目——flattening an array(扁平化数组)。这我好像在哪看过!应该是freecodecamp里的算法某一题。翻了下博客记录。是这篇——Steamroller-freecodecamp算法题目

题目名字不一样,内容一样,要求扁平化数组,简单的说就是把一个复杂多维数组变成一维数组。比如:输入[1,[2,[3,[4]]]],输出[1,2,3,4]。

  • 原先的解法
function steamroller(arr) {
 // I'm a steamroller, baby
 var res=[];
 for(var i=0;i<arr.length;i++){
   if(Array.isArray(arr[i])){
     res=res.concat(steamroller(arr[i]));
   }
   else{
     res.push(arr[i]);
   }
 }
 return res;
}
  • medium文章里的解法:
// 以下为复写版本
function steamroller(arr) {
 // I'm a steamroller, baby
 return arr.reduce((total,item) => {
   return total.concat(Array.isArray(item)? steamroller(item) : item);
 },[]);
}

显然第二种代码量少了。利用reduce方法替代了for循环,三目运算符替代判断语句大大减少了代码量。也用到了ES6的箭头函数。

以后写js代码时,一定要多思考。性能暂不提。能不能用现有的最新的方法函数简化代码?提高代码可读性?多思考多实践。多思考多实践。多思考多实践。

posted @ 2018-08-29 22:14  投弹手的香菇鸡面  阅读(132)  评论(0编辑  收藏  举报