Steamroller

//if 和else 中的返回值要注意同类型
//一个是单个数
//一个是整个for 的结果
//递归的返回值可能是单个数,也可能是for 的全部结果
//深一层的返回值要合并当前层的值,再返回给上一层
function steamrollArray(arr) {
  //元素是否是一个数组
  if(arr instanceof Array ===false){
    return [arr]
  }
  else{
    let r= []
    for(let i= 0; i<arr.length; i++)
      r=[...r,...steamrollArray(arr[i])]
    return r
  }
}
steamrollArray([1, [2], [3, [[4]]]]);

//最终return 不一定非得在前面
function steamrollArray(arr) {
  //元素是否是一个数组
  if(arr instanceof Array){
    let r= []
    for(let i= 0; i<arr.length; i++)
      r=[...r,...steamrollArray(arr[i])]
    return r
  }
  else{
    return [arr]//在下面最终return 也行
  }
}
steamrollArray([1, [2], [3, [[4]]]]);

测试数据:

steamrollArray([[["a"]], [["b"]]]) should return ["a", "b"]. steamrollArray([1, [2], [3, [[4]]]]) should return [1, 2, 3, 4]. steamrollArray([1, [], [3, [[4]]]]) should return [1, 3, 4]. steamrollArray([1, {}, [3, [[4]]]]) should return [1, {}, 3, 4].

//别人家的孩子
function steamrollArray(arr) {
  let flat = [].concat(...arr);
  return flat.some(Array.isArray) ? steamrollArray(flat) : flat;
}
steamrollArray([1, [2], [3, [[4]]]]);

//数组也是字符串嘛 666
[2,3,[5,[9,3],4]].toString()
//"2,3,5,9,3,4"
function steamrollArray(arr) {
  return arr
    .toString()
    .replace(",,", ",") // "1,2,,3" => "1,2,3"
    .split(",") // ['1','2','3']
    .map(function(v) {
      if (v == "[object Object]") {
        // bring back empty objects
        return {};
      } else if (isNaN(v)) {
        // if not a number (string)
        return v;
      } else {
        return parseInt(v); // if a number in a string, convert it
      }
    });
}