111 lines
3.0 KiB
Markdown
111 lines
3.0 KiB
Markdown
|
|
|
|
object-path
|
|
===========
|
|
|
|
Access deep properties using a path
|
|
|
|
[![NPM version](https://badge.fury.io/js/object-path.png)](http://badge.fury.io/js/object-path)
|
|
[![Build Status](https://travis-ci.org/mariocasciaro/object-path.png)](https://travis-ci.org/mariocasciaro/object-path)
|
|
[![Coverage Status](https://coveralls.io/repos/mariocasciaro/object-path/badge.png)](https://coveralls.io/r/mariocasciaro/object-path)
|
|
[![devDependency Status](https://david-dm.org/mariocasciaro/object-path/dev-status.svg)](https://david-dm.org/mariocasciaro/object-path#info=devDependencies)
|
|
![Downloads](http://img.shields.io/npm/dm/object-path.svg)
|
|
|
|
## Install
|
|
|
|
### Node.js
|
|
|
|
```
|
|
npm install object-path
|
|
```
|
|
|
|
### Browser
|
|
|
|
```
|
|
bower install object-path
|
|
```
|
|
|
|
### Typescript typings
|
|
|
|
```
|
|
tsd query object-path --action install --save
|
|
```
|
|
|
|
## Usage
|
|
|
|
```javascript
|
|
|
|
var obj = {
|
|
a: {
|
|
b: "d",
|
|
c: ["e", "f"]
|
|
}
|
|
};
|
|
|
|
var objectPath = require("object-path");
|
|
|
|
//get deep property
|
|
objectPath.get(obj, "a.b"); //returns "d"
|
|
|
|
//get the first non-undefined value
|
|
objectPath.coalesce(obj, ['a.z', 'a.d', ['a','b']], 'default');
|
|
|
|
//empty a given path (but do not delete it) depending on their type,so it retains reference to objects and arrays.
|
|
//functions that are not inherited from prototype are set to null.
|
|
//object instances are considered objects and just own property names are deleted
|
|
objectPath.empty(obj, 'a.b'); // obj.a.b is now ''
|
|
objectPath.empty(obj, 'a.c'); // obj.a.c is now []
|
|
objectPath.empty(obj, 'a'); // obj.a is now {}
|
|
|
|
//works also with arrays
|
|
objectPath.get(obj, "a.c.1"); //returns "f"
|
|
objectPath.get(obj, ["a","c","1"]); //returns "f"
|
|
|
|
//can return a default value with get
|
|
objectPath.get(obj, ["a.c.b"], "DEFAULT"); //returns "DEFAULT", since a.c.b path doesn't exists, if omitted, returns undefined
|
|
|
|
//set
|
|
objectPath.set(obj, "a.h", "m"); // or objectPath.set(obj, ["a","h"], "m");
|
|
objectPath.get(obj, "a.h"); //returns "m"
|
|
|
|
//set will create intermediate object/arrays
|
|
objectPath.set(obj, "a.j.0.f", "m");
|
|
|
|
//will insert values in array
|
|
objectPath.insert(obj, "a.c", "m", 1); // obj.a.c = ["e", "m", "f"]
|
|
|
|
//push into arrays (and create intermediate objects/arrays)
|
|
objectPath.push(obj, "a.k", "o");
|
|
|
|
//ensure a path exists (if it doesn't, set the default value you provide)
|
|
objectPath.ensureExists(obj, "a.k.1", "DEFAULT");
|
|
|
|
//deletes a path
|
|
objectPath.del(obj, "a.b"); // obj.a.b is now undefined
|
|
objectPath.del(obj, ["a","c",0]); // obj.a.c is now ['f']
|
|
|
|
//tests path existence
|
|
objectPath.has(obj, "a.b"); // true
|
|
objectPath.has(obj, ["a","d"]); // false
|
|
|
|
//bind object
|
|
var model = objectPath({
|
|
a: {
|
|
b: "d",
|
|
c: ["e", "f"]
|
|
}
|
|
});
|
|
|
|
//now any method from above is supported directly w/o passing an object
|
|
model.get("a.b"); //returns "d"
|
|
model.get(["a.c.b"], "DEFAULT"); //returns "DEFAULT"
|
|
model.del("a.b"); // obj.a.b is now undefined
|
|
model.has("a.b"); // false
|
|
|
|
```
|
|
|
|
### Credits
|
|
|
|
* [Mario Casciaro](https://github.com/mariocasciaro) - Author
|
|
* [Paulo Cesar](https://github.com/pocesar) - Major contributor
|