JavaScript, как эта функция может возвращать пустой массив? - PullRequest
19 голосов
/ 01 ноября 2011
function whatTheHeck(obj){
  var arr = []

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

  return arr
}

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

Функция concat ничего не может сделать. Но если я поставлю точку останова на эту строку в Firebug и запусту ее как часы, она будет работать нормально. И цикл for повторяется дважды, но в конце arr по-прежнему равен [].

1 Ответ

46 голосов
/ 01 ноября 2011

Array.concat создает новый массив - он не изменяет оригинал, поэтому ваш текущий код фактически ничего не делает.Он не изменяет arr.

Итак, вам нужно изменить свою функцию на эту, чтобы увидеть, как она на самом деле работает:

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

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

  return arr;
}

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

Если вы пытаетесь просто добавить один элементв конец массива, .push() - намного лучший способ:

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

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

  return arr;
}

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

Это одна из вещей, которые я нахожу немного запутывающими в методах массива Javascript.Некоторые изменяют исходный массив, некоторые - нет, и нет соглашения об именовании, чтобы знать, что делать, а что нет.Вы просто должны прочитать и узнать, какая работа и каким образом.

...