JavaScriptの配列が平坦化されています.

8352 ワード

問題:配列平準化とは?
つまり、ネストされた多層の配列を1層だけの配列に変換します.例えば、[1,[2,[3,[4,5]]]]の平準化は、[1, 2, 3, 4, 5]である.
1.for循環再帰的(for循環配列要素を利用して、配列要素が配列であれば再帰的に呼び出される)
    var array = [1,[2,[3,[4,5]]]]
    function flatten(array){
      var result = [];
      for(var i=0; i<array.length; i++){
        if(array[i] instanceof Array){
          result = result.concat(flatten(array[i]));
        }else{
          result.push(array[i])
        }
      }
      return result;
    }
    console.log(flatten(array)) //[1, 2, 3, 4, 5]
2.toStringを利用して(フラット化が必要な配列をtoStringメソッドを文字列に変えて、splitを呼び出して配列に変えます)
    var array = [1,[2,[3,[4,5]]]];
    function flatten(array){
      return array.toString().split(',').map( item => +item)
    }
    console.log(flatten(array))  //[1, 2, 3, 4, 5]
3.ES 6を利用して拡張演算子を追加します.(拡張演算子は平坦な1つのレイヤーだけです.)
    var array = [1,[2,[3,[4,5]]]];
    function flatten(array){
      while(array.some( item => Array.isArray(item) )){
        array = [].concat(...array);
      }
      return array;
    }
    console.log(flatten(array)) //[1, 2, 3, 4, 5]