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]
. Я не совсем понимаю, почему, но я подозреваю, что переменная результата, в которую она помещается, не является исходной переменной результата, которая содержит все предыдущие элементы, которые были помещены?