Написание моей версии Array.prototype.flat () - PullRequest
1 голос
/ 15 апреля 2020
var each = function(collection, iterator) {
    if (Array.isArray(collection)) {
      for (var i = 0; i < collection.length; i++) {
        iterator(collection[i], i, collection);
      }
    } else {
      for (var key in collection) {
        iterator(collection[key], key, collection);
      }
    }
  };

  var flatten = function(nestedArray, result) {
    var result = [];

    each(nestedArray, function(element) {
      console.log(element);
      if (!Array.isArray(element)) {
        result.push(element)
      } else {
        flatten(element)
      }
    })
    return result;
  };

flatten([1, 2, [3]]);

Я пишу свою собственную версию flatten, которая должна сгладить данный массив, возвращая новый массив только со значениями в одном массиве без вложений. Я подошел к этой проблеме, что если элемент в данном массиве является вложенным, то для меня имеет смысл подключить его обратно к исходной функции flatten. Например, когда моя программа достигает [3] по индексу 2 для ввода, тогда [3] принимается в качестве аргумента в flatten, где она принимает значение nestedArray в функции. Затем он должен перебрать объект nestedArray и проверить, является ли этот массив element. В случае [3], регистрируя каждый элемент на экране, я вижу, что [3] действительно входит в функцию flatten и в результате имеет значение 3. Это значение должно быть помещено в мою переменную result, но я получаю только вывод [1, 2]. Я не совсем понимаю, почему, но я подозреваю, что переменная результата, в которую она помещается, не является исходной переменной результата, которая содержит все предыдущие элементы, которые были помещены?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...