function flatten(oldArr) {
var newArr = []
for (var i = 0; i < oldArr.length; i++) {
if (Array.isArray(oldArr[i])) {
newArr = newArr.concat(flatten(oldArr[i]))
} } else {
newArr.push(oldArr[i])
}
}
return newArr;
}
// // flatten([[1],[2],[3]]) // [1,2,3]
// // flatten([[[[1], [[[2]]], [[[[[[[3]]]]]]]]]]) // [1,2,3]
The problem is to use a recursive function to have only one output of all the values in the array. I couldn't solve it, so I saw the answer. I don't know the logic of operation in the code for statement. What will be the logic of the code's operation?
javascript recursive flatten
One thing to have in dealing with recursive functions is belief in functions. Here, the flatten
function is a function that makes the array flat
. When implementing the content of the function, let's believe that the flatten
function that appears in the code in the function is correct.
You might be confused about what I'm saying. Let me give you an example.
const arr = [
[1, [2, 3, 4], [5, [6], 7]],
[3, 1, 4, [1]],
5, 9,
[2, 6, 5]
]
Suppose we want to do arr
for flatten
.
So let's believe that this flatten
function is implemented and think about what happens when we turn the for
-loop above for each element of arr
.
[1, [2, 3, 4], [5, [6], 7]],
// // flatten 후 -> [1, 2, 3, 4, 5, 6, 7]
[3, 1, 4, [1]],
// // flatten 후 -> [3, 1, 4, 1]
5,
// -> Not an array, so stay.
9,
// -> Not an array, so stay.
[2, 6, 5]
// // flatten 후 -> [2, 6, 5]
in the end
newArr = newArr.concat([1, 2, 3, 4, 5, 6, 7])
newArr = newArr.concat([3, 1, 4, 1])
newArr.push(5)
newArr.push(9)
newArr = newArr.concat([2, 6, 5])
You can see that it's going to be the [1, 2, 3, 4, 5, 6, 7, 3, 1, 4, 1, 5, 9, 2, 6, 5]
. I believed that flatten
written in the function would run well, and I can see that the results are working.
It is in line with analyzing recursive functions. If you have to write a recursive function called flatten
from scratch, suppose you already have the correct flatten
function and think about how to use it, it's a little easier to squeeze. It would be better if the direction of thinking was "to split a big problem into small problems" (otherwise, I could create a code like function platten(oldArr) { return platten(oldArr)}
).)
Let's look at the situation in arr
mentioned earlier. Let's do arr
to flatten
.
© 2024 OneMinuteCode. All rights reserved.