Search code examples
javascriptarraysobject

Best way to flatten JS object (keys and values) to a single depth array


I have written this small function to get all keys and values of an object and store them into an array. The object might contain arrays as values...

Object { 0: [1,2,3,4] } to [0,1,2,3,4] converting all elements to integers

I wonder whether there is a faster/cleaner way to do so:

function flattenObject(obj) {
    // Returns array with all keys and values of an object
    var array = [];
    $.each(obj, function (key, value) {
        array.push(key);
        if ($.isArray(value)) {
            $.each(value, function (index, element) {
                array.push(element);
            });
        }
        else {
            array.push(value);
        }
    });

    return array
}

Solution

  • You could just concat all keys and values. (It does not solve the type casting to number for keys.)

    var object =  { 0: [1, 2, 3, 4] },
        result = Object.keys(object).reduce(function (r, k) {
            return r.concat(k, object[k]);
        }, []);
        
    console.log(result);