92 lines
2.6 KiB
Markdown
92 lines
2.6 KiB
Markdown
|
[![Build Status](https://travis-ci.org/selfcontained/deap.svg?branch=master)](https://travis-ci.org/selfcontained/deap)
|
||
|
[![Coverage Status](https://img.shields.io/coveralls/selfcontained/deap.svg)](https://coveralls.io/r/selfcontained/deap?branch=master)
|
||
|
|
||
|
===
|
||
|
|
||
|
[![browser support](https://ci.testling.com/selfcontained/deap.png)](http://ci.testling.com/selfcontained/deap)
|
||
|
|
||
|
deap
|
||
|
====
|
||
|
|
||
|
extend and merge objects, deep or shallow, in javascript
|
||
|
|
||
|
|
||
|
### installation
|
||
|
|
||
|
```bash
|
||
|
npm install deap
|
||
|
```
|
||
|
|
||
|
```javascript
|
||
|
var deap = require('deap');
|
||
|
```
|
||
|
|
||
|
### browser usage
|
||
|
|
||
|
**deap** assumes es5, so we recommend using an es5 shim for older browsers. [Browserify](https://github.com/substack/node-browserify) is also recommended as a means to use this module client-side, but other module loaders for browsers will work with **deap** as well if you shim it.
|
||
|
|
||
|
### available functions
|
||
|
|
||
|
+ deap() and deap.extend() - **deep extend**
|
||
|
+ deap.merge() - **deep merge**
|
||
|
+ deap.update() - **deep update**
|
||
|
+ deap.extendShallow() - **shallow extend**
|
||
|
+ deap.mergeShallow() - **shallow merge**
|
||
|
+ deap.updateShallow() - **shallow update**
|
||
|
+ deap.clone() - **deep clone**
|
||
|
|
||
|
---
|
||
|
|
||
|
### deap() and deap.extend()
|
||
|
|
||
|
Deep extend. Copy all the properties from one object onto another, cloning objects deeply.
|
||
|
|
||
|
Takes *n* number of arguments, modifies the first argument and returns it.
|
||
|
|
||
|
```javascript
|
||
|
var a = { name: 'Joe' };
|
||
|
|
||
|
deap.extend(a, { age: 26 }); // returns: a => { name: 'Joe', age: 26 }
|
||
|
deap.extend({}, someObj); // clone someObj
|
||
|
```
|
||
|
|
||
|
### deap.merge()
|
||
|
|
||
|
Deep merge. Copy properties from one object to another, not replacing existing properties.
|
||
|
|
||
|
Takes *n* number of arguments, modifies the first argument and returns it.
|
||
|
|
||
|
```javascript
|
||
|
var a = { name: 'Joe', address: { number: 1234 };
|
||
|
deap.merge(a, { name: 'Jack', age: 26, phone: '555-555-5555', address: { number: 4321, street: 'University Blvd' });
|
||
|
// returns: a => { name: 'Joe', age: 26, phone: '555-555-5555', address: { number: 1234, street: 'University Blvd' }}
|
||
|
```
|
||
|
|
||
|
### deap.update()
|
||
|
|
||
|
Deep update. Fill an object's existing properties from another object.
|
||
|
|
||
|
Takes *n* number of arguments, modifies the first argument and returns it.
|
||
|
|
||
|
```javascript
|
||
|
var a = { name: 'Joe', phone: '' };
|
||
|
deap.update(a, { age: 26, phone: '555-555-5555' }); // returns: a => { name: 'Joe', phone: '555-555-5555' }
|
||
|
```
|
||
|
|
||
|
---
|
||
|
|
||
|
## shallow only
|
||
|
|
||
|
If you prefer a shallow-only instance of **deap** you can require it specifically
|
||
|
|
||
|
```javascript
|
||
|
var deap = require('deap/shallow');
|
||
|
|
||
|
deap() && deap.extend(); // shallow extend
|
||
|
deap.merge(); //shallow merge
|
||
|
deap.update(); //shallow update
|
||
|
deap.clone(); // deep clone
|
||
|
```
|
||
|
|
||
|
... the end
|