Skip to content

jzhobes/objectutil

Repository files navigation

objectutil

A handy collection of methods related to manipulating objects.

clone

Performs a deep copy of the provided input. Supported data types at the moment are: Object, Array, Date, string, number, boolean, and function.

const {clone} = require('@mountaingapsolutions/objectutil');

// Cloneable data types: Object, Array, string, number, boolean, and
// function.
clone([
    {name: 'John'},
    ['nested array'],
    'foobar',
    42,
    true,
    () => console.log('hello world')
]);

filter

Similar to Array.filter, but for objects. The filter function will iterate through every key in the object.

const {filter} = require('@mountaingapsolutions/objectutil');

filter({key1: 'foo', key2: 'bar', key3: 'baz'}, (key) => key !== 'key2');
// => {key1: 'foo', key3: 'baz'}

toArray

Converts an object to an array. The optional 2rd argument is a custom mapper function to return just a specific subset of each element.

const {toArray} = require('@mountaingapsolutions/objectutil');

const input = {
    'MA': {name: 'Massachusetts'},
    'ME': {name: 'Maine'},
    'NH': {name: 'New Hampshire'}
};

toArray(input)
// => [{name: 'Massachusetts'}, {name: 'Maine'}, {name: 'New Hampshire'}]

toArray(input, (state) => state.name)
// => ['Massachusetts', 'Maine', 'New Hampshire']

toObject

Converts an array to an object. The 2nd argument is the key name to use. Defaults to a string index if not provided. Optional 3rd argument is a custom mapper function to return just a specific subset of the object.

const {toObject} = require('@mountaingapsolutions/objectutil');

const input = [
    {code: 'MA', name: 'Massachusetts'},
    {code: 'ME', name: 'Maine'},
    {code: 'NH', name: 'New Hampshire'}
];

toObject(input)
/**
{
    '0': {code: 'MA', name: 'Massachusetts'},
    '1': {code: 'ME', name: 'Maine'},
    '2': {code: 'NH', name: 'New Hampshire'}
}
**/

toObject(input, 'code')
/**
{
    MA: {code: 'MA', name: 'Massachusetts'},
    ME: {code: 'ME', name: 'Maine'},
    NH: {code: 'NH', name: 'New Hampshire'}
}
**/

toObject(input, 'code', (state) => state.name))
/**
{
    MA: 'Massachusetts',
    ME: 'Maine',
    NH: 'New Hampshire'
}
**/

safeWrap / unwrap

Wraps an object to safely return any object property, ignoring any undefined errors. This is analogous to using the existential operator in TypeScript.

const {safeWrap, unwrap} = require('@mountaingapsolutions/objectutil');

const input = {a: {b: {c: {d: 'value'}}}};
const wrappedInput = safeWrap(input);
unwrap(wrappedInput.a.b.c.d.e.f.g.h)
// => undefined
unwrap(wrappedInput.a.b.c.d)
// => 'value'

updateIn

Clones the provided array of objects and attempts to update the old object with the updated object by the specified key. If key is not provided, defaults to 'id'.

const {updateIn} = require('@mountaingapsolutions/objectutil');

const original = [{
    uuid: 0,
    label: 'foo'
    }, {
    uuid: 1,
    label: 'quz',
    value: true,
    date: ''
}];
const item = {
    uuid: 1,
    label: 'bar',
    value: false,
    attribute: ''
};
updateIn(original, item, 'uuid');
/** =>
{
    uuid: 1,
    label: 'bar',
    value: false,
    date: '',
    attribute: ''
});
*/

updateOrAppend

Same as updateIn, but if the object to update is not in the array, it will be appended to the cloned array.

About

A handy collection of methods related to manipulating objects.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •