UNPKG

util-ex

Version:

Browser-friendly enhanced util fully compatible with standard node.js

59 lines (57 loc) 1.83 kB
/* keys: @param aOptions * enumerable: defaults to true * nonEnumerable: defaults to false */ const getOwnPropertyNames = Object.getOwnPropertyNames; const getObjectKeys = Object.keys; /** * Returns an array containing the values of all enumerable or non-enumerable properties of an object. * * @param {Object} aObject - The object to map properties from. * @param {Object} [aOptions] - Optional parameter to specify options for mapping. * @param {boolean} [aOptions.enumerable=true] - If true, enumerable properties are included in the mapping. * @param {boolean} [aOptions.nonEnumerable=false] - If true, non-enumerable properties are included in the mapping. * @returns {Array} An array containing the mapped property values. * @example * const myObj = {a: 1, b: 2, c: 3}; * Object.defineProperty(myObj, 'p', { * value: 'value2', * enumerable: false * }); * * // Returns [1, 2, 3] * const result1 = map(myObj); * * // Returns ['value2'] * const result2 = map(myObj, {enumerable: false, nonEnumerable: true}); */ export function map(aObject, aOptions) { let enumerable = true; let nonEnumerable = false; const result = []; let enumKeys; let keys; if (aOptions) { if (aOptions.enumerable != null) {enumerable = aOptions.enumerable;} if (aOptions.nonEnumerable != null) {nonEnumerable = aOptions.nonEnumerable;} } if (aObject && (enumerable || nonEnumerable)) { if (enumerable && !nonEnumerable) { keys = getObjectKeys(aObject); } else { keys = getOwnPropertyNames(aObject); if (!enumerable) { enumKeys = getObjectKeys(aObject); keys = keys.filter((k) => { return enumKeys.indexOf(k) === -1; }); } } keys.forEach((k) => { result.push(aObject[k]); }); } return result; }; export default map;