Подтвердить что ты не робот

Javascript, как эта функция может возвращать пустой массив?

function whatTheHeck(obj){
  var arr = []

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

  return arr
}

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

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

4b9b3361

Ответ 1

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. Некоторые модифицируют исходный массив, некоторые - нет, и нет соглашения об именах, чтобы знать, что делать, а какие нет. Вам просто нужно прочитать и узнать, какая именно работа.