Моя логика для проблемы, используя ниже в качестве ввода.
var input = [['A','B'],1,2,3,['C','D']]
- Проверьте первый элемент, чтобы увидеть, является ли массив или не используется Array.isArray (input)
- Если первый элемент является массивом, вызовите функцию, первый элемент ['A, 'B'] в качестве аргумента.
- Первым элементом вложенного массива является 'A', который не является массивом, поэтому вставьте этот элемент в массив результатов и сдвиньте его.Повторите вызов функции.
При попытке выровнять вложенные массивы с помощью рекурсии моя входная переменная для функции продолжает переназначаться, не давая мне снова вызвать функцию с использованием исходного массива.Как предотвратить переназначение исходной входной переменной?
Я понимаю, что это не полное решение, однако я застреваю при перемещении первого элемента из вложенного массива.
Я прошел шаг за шагом с этой функцией,но должно быть что-то, чего мне не хватает, очень поможет другой набор глаз.
Я также использовал свой инструмент разработчика Chrome, устанавливая точки останова для пошагового мониторинга функции.
//Defining original input variable
var input = [['A','B'],1,2,3,['C','D']]
function flat(array){
var result = []
var firstElement = array[0]
//CHECK IF FIRST ELEMENT IS ARRAY OR NOT
if(Array.isArray(firstElement)){
return flat(firstElement)
}
//IF ELEMENT NOT ARRAY, PUSH ELEMENT TO RESULT
else{result.push(firstElement)
array.shift() //removing child element
return (flat(array)) //call function on same array
}
if(array.length===0){return result}
}
Первая итерация: firstElement = ['A', 'B'], Array.isArray (firstElement) будет истинным, поэтому вызовите flat (firstElement)
Вторая итерация: firstElement= 'A', Array.isArray (firstElement) имеет значение false, поэтому мы 1. прыгаем вниз, чтобы вставить этот элемент в результат 2. удаляем 'A' с помощью array.shift () 3. Вызываем flat (array), где array isnow ['B']
Третья итерация: firstElement = 'B', Array.isArray (firstElement) = falseЯ сбросил результат, когда вспомнил функцию.2. удалить 'B' с помощью array.shift (), массив теперь пуст, -> [] 3. Как я могу выйти и использовать flat () в исходном входном массиве?