Aplanar un array

Crea una función que reciba un array. Este array puede contener todo tipo de elementos, incluso otros arrays. La función debe devolver un único array plano y unidimensional con todos los elementos. Estas son las condiciones:

  1. Si el elemento es un Array, incluye cada elemento que contiene y se siguen aplicando las siguientes reglas:
  2. Si el elemento es una Function, incluye el resultado de la función, no la función en sí.
  3. Si el elemento es un Object simple o un Primitive, inclúyelo tal como está.

Ejemplos

flattenArray([1, "2", [3, function () { return 4; }, [ "five" ], "six", true, { prop: "val" }]])
➞ [1, "2", 3, 4, "five", "six", true, { prop: "val" }]

flattenArray([1, 2, [3, [4, 5], 6], 7, 8]) ➞ [1, 2, 3, 4, 5, 6, 7, 8]

flattenArray() ➞ []

Notas

Si no se proporciona ninguna entrada, debe devolver un array vacío: [].