Conversión de objeto a una matriz de forma recursiva en JavaScript

El Objeto.entradas() El método en JavaScript se puede usar para convertir un objeto en una matriz, pero no funciona de forma recursiva. Así que aquí hay una función para lograrlo.

No puedo pensar en una razón por qué querrías hacer esto, pero surgió mientras preparaba un artículo sobre el uso de Object.entries() – ¡así que aquí está!

Función recursiva para convertir objetos en matrices

Dejaré que los comentarios hablen sobre lo que está pasando. La esencia de esto es que (por cualquier motivo) desea convertir un objeto, y cualquier objeto dentro de él, en valores de matriz/par clave como resultado de Object.entries() . Los arreglos se dejarán como están.

//Demonstration object - a mess of nested objects and arrays
var myObject = {
    colour: 'blue',
    number: 43,
    name: 'Fred',
    enabled: true,
    subArray: [0, 1, {
        height: 60
    }],
    subObject: {
        foo: 'bar',
        anotherSubObject: {
            deep: 'dive',
            mood: {
                happy: false
            }
        }
    }
};

//Function to convert objects containing nested objects and arrays to array pairs similar to Object.entries()
function propertiesToArray(val) {

    //By default (val is not object or array, return the original value)
    var result = val;

    // If object passed the result is the return value of Object.entries()
    if (typeof val === 'object' && !Array.isArray(val)) {
        result = Object.entries(val);
        // If one of the results is an array or object, run this function on them again recursively
        result.forEach((attr) => {
            attr[1] = propertiesToArray(attr[1]);
        });
    }

    //If array passed, run this function on each value in it recursively
    else if (Array.isArray(val)) {
        val.forEach((v, i, a) => {
            a[i] = propertiesToArray(v)
        });
    }

    // Return the result
    return result;
}

// Test the function
console.log(propertiesToArray(myObject));