js 配列にロードローラー......だッ!

  • 1
    いいね
  • 2
    コメント

お題

配列にロードローラー、つまりネストの異なる多次元配列を平らにならす。

script.js
function roadroller(arr) {
//write your code.
  return arr;
}
roadroller([1, [2], [3, [[4]]]]); //[1, 2, 3, 4]

出力結果 例

([1, [], [3, [[4]]]])  //[1, 3, 4]
([1, {}, [3, [[4]]]]) // [1, {}, 3, 4]

つかったもの

if文
isArray()
array.forEach()
push()

考え方

引数が配列であるか判定して条件分岐する。
配列であれば、for...in文で順に取り出して再帰する。
配列でなくなるまで再帰を繰り返して、処理が終わったところで用意した別の配列に入れる。
上記をarray.forEach()で配列の各要素に実行する。
平らになった配列が返ってくる。
おわり

コード

script.js
function roadroller(arr) {
  var flattenedArray = [];
  var flatten = function(arg) {
    if (!Array.isArray(arg)) {
      flattenedArray.push(arg);
    } else {
      for (var a in arg) {
        flatten(arg[a]);
      }
    }
  };
  arr.forEach(flatten);
  return flattenedArray;
}

その他コード

function roadroller(arr) {
  return arr.reduce(function (flat, toFlatten) {
    return flat.concat(Array.isArray(toFlatten) ? roadroller(toFlatten) : toFlatten);
  }, []);
}

他にもコードが浮かんだ方、コメントお待ちしております。