Konvertering af objekt til et array rekursivt i JavaScript

Den Object.entries() metode i JavaScript kan bruges til at konvertere et objekt til et array - men det virker ikke rekursivt. Så her er  en funktion til at opnå det.

Jeg kan ikke komme i tanke om en grund til hvorfor du ville gerne gøre dette, men det dukkede op, mens du sammensatte en artikel om brug af Object.entries() – så her er det!

Rekursiv funktion til konvertering af objekter til arrays

Jeg lader kommentarerne tale om, hvad der foregår. Essensen af ​​det er, at du (uanset grund) vil konvertere et objekt og alle objekter i det til array/nøgleparværdier som output af Object.entries() . Selve arrays efterlades som de er.

//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));