Skip to content

Provides general functionality for for dealing with nested properties in JavaScript objects with unlimited depth.

License

Notifications You must be signed in to change notification settings

apphp/js-object-resolver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Object Resolver

Provides general functionality for dealing with nested properties in JavaScript objects

 

Available methods:

  • isEqual
  • filterObject
  • removeUndefinedProperties
  • hasNestedProperty
  • getNestedProperty
  • fetchLastNestedProperty
  • setNestedProperty
  • deleteNestedProperty
  • cloneObject
  • cloneStructure

 

Install

Install / Uninstall with npm:

$ npm install @apphp/object-resolver

Uninstall

$ npm uninstall @apphp/object-resolver

Run Tests

$ npm run test

After tests running coverage report can be found in coverage directory

Run ESLint

To perform ESlint check run following command:

$ npm run eslint

To fix issues, found by ESLint run:

$ npm run eslint-fix

Usage

Require package:

// by using require
const resolver = require('@apphp/object-resolver');
// by using import 
//import resolver from "@apphp/object-resolver";
// by using object destructor
//const {cloneObject} = require('dist/object-resolver');

isEqual(obj, propertyPath)

Compares two objects for deep equality

const result = resolver.isEqual({ a: 1, b: { c: 2 } }, { a: 1, b: { c: 2 } });
const result = resolver.isEqual([1, 2, 3], [1, 2, 4]);

filterObject(obj, predicate)

Filters the properties of an object based on a predicate function

const filtered = resolver.filterObject({ a: 1, b: 2, c: 3, d: 4 }, (value, key) => value % 2 === 0);

removeUndefinedProperties(obj)

Removes properties with undefined values from an object

const cleaned = resolver.removeUndefinedProperties({ a: 1, b: undefined, c: { d: 4, e: undefined } });

hasNestedProperty(obj, propertyPath)

Checks if nested property exists, if not return default value

const prop = resolver.hasNestedProperty(obj, 'innerObject.deepObject.value');
const prop = resolver.hasNestedProperty(obj, 'innerObject.deepObject.value', 'defaultValue');

getNestedProperty(objParam, propertyPath, defaultValue)

Get nested property exists and if not empty perform some action

const prop = resolver.getNestedProperty(obj, 'innerObject.deepObject.value')
if (prop) {
  // ...
}

fetchLastNestedProperty(obj, path)

Fetch last chained nested property

const prop = resolver.fetchLastNestedProperty(obj, 'prop');

setNestedProperty(obj, path, value)

Set a deeply nested property in an object

const prop = resolver.setNestedProperty(obj, 'user.profile.name', 'John Doe');

deleteNestedProperty(obj, path)

Delete a deeply nested property in an object

const prop = resolver.deleteNestedProperty(obj, 'user.profile.name', 'John Doe');

cloneObject(obj)

Deep cloning of object

const objCopy = resolver.cloneObject(obj);

cloneStructure(obj, options)

Deep cloning of structure (node > v17)

const structureCopy = resolver.cloneStructure(obj, options);

Examples

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const compareResult = resolver.isEqual(obj1, obj2);
const original = { a: 1, b: 2, c: 3, d: 4 };
const filtered = resolver.filterObject(original, (value, key) => value % 2 === 0);
console.log(filtered); 
const original = { a: 1, b: undefined, c: { d: 4, e: undefined } };
const cleaned = resolver.removeUndefinedProperties(original);
const obj = {
  innerObject: {
    deepObject: {
      value: 'Here I am'
    }
  }
};

console.log(resolver.hasNestedProperty(obj, 'innerObject.deepObject.value'));                         // true
console.log(resolver.hasNestedProperty(obj, 'innerObject.deepObject.wrongValue'));                    // false
console.log(resolver.getNestedProperty(obj, 'innerObject.deepObject.value'));                         // 'Here I am'
console.log(resolver.getNestedProperty(obj, 'innerObject.deepObject.wrongValue'));                    // undefined
console.log(resolver.getNestedProperty(obj, 'innerObject.deepObject.wrongValue.oneMore', 'Oh-h-h'));  // 'Oh-h-h'
const obj = {
  innerObject: {
    deepObject: [
      { name: 'John' },
      { name: 'Nick' },
      { name: 'Ron' }
    ]
  }
};

console.log(resolver.hasNestedProperty(obj, 'innerObject.deepObject.0.name'));              // true
console.log(resolver.getNestedProperty(obj, 'innerObject.deepObject.1.name'));              // 'Nick'
const obj = { role: { role: { role: 'student' } }};
const role = resolver.fetchLastNestedProperty(obj, 'role');
const obj = {'a':{'b':2}, 'c':3};
const objCopy = resolver.cloneObject(obj);

License

MIT

About

Provides general functionality for for dealing with nested properties in JavaScript objects with unlimited depth.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published