arrayToObject.js

/**
 * Convert an array into a k-v paired object.
 * @alias array.arrayToObject
 * @param {*} arrayOfObjects
 * @param {*} keyGetter
 * @param {*} valueGetter
 * @returns {Object}
 */
const arrayToObject = (arrayOfObjects, keyGetter, valueGetter) => {
    if (arrayOfObjects == null) {
        return null;
    }

    if (!Array.isArray(arrayOfObjects)) {
        throw new Error('The target argument should be an array.');
    }

    const _keyGetter = typeof keyGetter === 'function' ? keyGetter : (obj) => obj[keyGetter];

    const _valueGetter =
        valueGetter == null
            ? (obj) => obj
            : typeof valueGetter === 'function'
            ? valueGetter
            : (obj) => obj[valueGetter];

    return arrayOfObjects.reduce((table, obj, index) => {
        table[_keyGetter(obj, index)] = _valueGetter(obj, index);
        return table;
    }, {});
};

export default arrayToObject;