objectToArray.js

import _map from 'lodash/map';
import _get from './get';

/**
 * Convert a k-v paired object into an array pair-by-pair.
 * @alias object.objectToArray
 * @param {*} object
 * @param {*} keyNaming
 * @param {*} valueNaming
 * @returns {array}
 */
const objectToArray = (object, keyNaming, valueNaming, valuePath) => {
    // (object, elementBuilder)
    if (typeof keyNaming === 'function') {
        if (valueNaming != null || valuePath != null) {
            throw new Error('Invalid argument!');
        }

        return _map(object, keyNaming /* elementBuilder(v, k) => array element */);
    }

    keyNaming ?? (keyNaming = 'name');
    valueNaming ?? (valueNaming = 'value');

    return _map(object, (v, k) => ({ [keyNaming]: k, [valueNaming]: valuePath ? _get(v, valuePath) : v }));
};

export default objectToArray;