Get deep property of an object via a string path
- ✨ Benefits
- 🎒 Requierments
- 🚀 Quickstart
- 📘 Documentation
- 🆘 Troubleshooting
- 🤝 Contributing
- 🧪 Testing
- ⚖️ License
- No loops for dynamic access to deep property values
- Better readability than loops or even multiple brackets
No requierments, just works.
Install using the terminal:
npm install @danielcobo/objref
Require the module:
const objref = require('@danielcobo/objref');
Note: In case you're wondering, @danielcobo/ is just a namespace scope - an NPM feature. Scopes make it easier to name modules and improve security.
Declare it as a global variable named objref by including this script before any script you want to use it in:
<script src="https://cdn.jsdelivr.net/npm/@danielcobo/objref@1/dist/iife/objref.min.js"></script>
Or import it as an ECMAScript module:
import * as objref from 'https://cdn.jsdelivr.net/npm/@danielcobo/objref@1/dist/esm/objref.min.js';
Also, feel free to download the file if you prefer not to use jsdelivr. In that case just replace the url with the relative file path.
//Example object
const a = {
b : {
c : {
d : 1,
e : 2
}
}
}
//Basic example
const d = objRef(a, 'b/c/d'); //d === 1
//We can use a custom separator
const e = objRef(a, 'b-c-e', '-'); // e === 2
//Build an object reference
let f = objRef(a, 'b/c/f', '/', true);
const abc = objRef(a, 'b/c');
abc.f = 100; //a.b.c.f === 100;
//Keep in mind abc is an object reference, f is a variable
f = 200 //f === 200; a.b.c.f === 100
//Do not use a trailing separator
const d = objRef(a, 'b/c/d/'); //this will throw an error - Invalid path
For details see documentation below.
Get deep property of an object via a string path
Name | Type | Default | Description |
---|---|---|---|
obj | Object |
Data object | |
path | string |
Reference path | |
[separator] | string |
'/' | Separator used in path |
[buildPath] | boolean |
false | True/false to define undefined object subpaths |
Type | Description |
---|---|
* |
Deep property value |
Source: src/index.js:1
If you run into trouble or have questions just submit an issue.
Contributions come in many shapes and sizes. All are welcome. You can contribute by:
- asking questions
- suggesting features
- sharing this repo with friends
- improving documentation (even fixing typos counts 😉)
- providing tutorials (if you do, please let me know, I would love to read them)
- improving tests
- contributing code (new features, performance boosts, code readability improvements..)
General guidelines:
- there are no dumb questions
- be polite and respectful to others
- do good
When coding remember:
- working > maintainability > performance
- best code is no code
- be descriptive when naming
- keep it DRY
- do test
Contribution licence: All contributions are considered to be under same license as this repository.
Testing suite: 🃏 Jest | Test command: npm test
Mutation testing suite: 👽 Stryker Mutator | Mutation test command: npm run mutation
If you intend to develop further or contribute code, then please ensure to write and use testing. Strive for 100% code coverage and high mutation scores. Mutation score 100 is great, but it's not always neccessary (if there are valid reasons).