web-dev-qa-db-ja.com

javascript、この関数はどのようにして空の配列を返すことができますか?

function whatTheHeck(obj){
  var arr = []

  for(o in obj){
    arr.concat(["what"])
  }

  return arr
}

whatTheHeck({"one":1, "two": 2})

Concat関数は完全に何もしません。しかし、Firebugのその行にブレークポイントを設定し、その行をウォッチとして実行すると、正常に機能します。そして、forループは2回繰り返されますが、最終的にarrは[]に等しくなります。

20
Moss

_Array.concat_は新しい配列を作成します-元の配列を変更しないため、現在のコードは実際には何もしていません。 arrは変更されません。

したがって、実際に機能することを確認するには、関数をこれに変更する必要があります。

_function whatTheHeck(obj){
  var arr = [];

  for(o in obj){
    arr = arr.concat(["what"]);
  }

  return arr;
}

whatTheHeck({"one":1, "two": 2});
_

配列の最後に1つの項目を追加するだけの場合は、.Push()の方がはるかに優れた方法です。

_function whatTheHeck(obj){
  var arr = [];

  for(o in obj){
    arr.Push("what");
  }

  return arr;
}

whatTheHeck({"one":1, "two": 2});
_

これは、Javascript配列メソッドについて少し混乱していることの1つです。元の配列を変更するものもあれば、変更しないものもあり、どちらが変更し、どれが変更しないかを知るための命名規則はありません。あなたはただ読んで、どの方法でどの作品を学ぶ必要があります。

46
jfriend00