flatten() | Underscore JS 日本語リファレンス

第1引数「配列」のみの時は、入れ子の配列を単純な配列(入れ子なし)にしてくれる。第2引数で「true」が指定されている時は、一番浅い配列だけを解消する。

■使用例

var arr = [1, [2], [3, [ [4] ] ] ];
// re = [ 1, 2, 3, 4 ];
var re = _.flatten( arr );

var arr = [1, [2], [3, [ [4] ] ] ];
// re2 = [1,2,3,[ [4] ] ];
var re2 = _.flatten( arr, true);

■内部構造

  _.flatten = function(array, shallow) {
    return flatten(array, shallow, false);
  };

// _.flatten() の引数は以下の関数に代入される。
  var flatten = function(input, shallow, strict, startIndex) {
    var output = [], idx = 0;

// for( var i = 0, length = array.length; i < length; i++ ){
    for (var i = startIndex || 0, length = input && input.length; i < length; i++) {

// 配列の各値。
      var value = input[i];

// 各値が配列、arguments である場合
      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {

// 第2引数が「true」指定されている時は再帰処理しない。1回しか配列を解消しない。
        if (!shallow) value = flatten(value, shallow, strict);
 
        var j = 0, len = value.length;
        output.length += len;

// 各値が配列でない時、 j = 0 < len = 0 なのでこの処理は行われない。
        while (j < len) {
          output[idx++] = value[j++];
        }
      } else if (!strict) {
      	
// 各値が結果出力用の配列に入れられる。
        output[idx++] = value;
      }
    }
    return output;
  };

このページのトップへ戻る