10

配列を平坦化する関数を作成しようとしています。機能の一部が機能しており、残りの半分で助けが必要です。

flatten: function(anyArray, singleLevel) {
  if (singleLevel == true) {
      flatArray = Array.prototype.concat.apply([], anyArray);
      return flatArray;
  }
  flatArray = Array.prototype.concat.apply([], anyArray);
  if (flatArray.length != anyArray.length) {
      flatArray = someObject.array.flatten(flatArray);
  }
  return flatArray;
}

入力すると

.flatten([[[1],[1,2,3,[4,5],4],[2,3]]], true);

1つのレベルだけを平らにしたい:

[[1],[1,2,3,[4,5],4],[2,3]]
4

3 に答える 3

5

concat配列メソッドは、要素が追加される引数として 1 つ以上の配列を想定しています。

[1].concat([2, 3], [4]) // [1, 2, 3, 4]

したがって、を使用している場合apply、別のレベルが平坦化されます。

[].concat.apply([1], [[2], [3]]) // === [1].concat([2], [3])

したがって、フラット化レベルを 1 つだけ取得するpush代わりにconcat、またはcall(または単に直接呼び出し) の代わりに使用できます。apply

于 2013-02-26T21:23:06.637 に答える