49 lines
1.3 KiB
Markdown
49 lines
1.3 KiB
Markdown
# defaults-deep
|
|
## An individual component of the [[nodeutils package]](https://www.npmjs.com/package/nodeutils)
|
|
|
|
Similar to lodash's defaultsDeep, but without mutating the source object, and no merging of arrays.
|
|
|
|
|
|
## Installation
|
|
|
|
Install the package via `npm`:
|
|
|
|
```
|
|
$ npm install @nodeutils/defaults-deep --save
|
|
```
|
|
|
|
## Usage
|
|
|
|
#### Arguments
|
|
2. `[sources]` *(...Object)*: The source objects. Provide 2 or more, in descending order of importance
|
|
|
|
#### Returns
|
|
*(Object)*: Returns the merged objects
|
|
|
|
#### Example
|
|
```js
|
|
var defaultsDeep = require('@nodeutils/defaults-deep');
|
|
|
|
var objectA = { bar: { biz: { net: 'txi', qox: 'fuc' } }, qux: ['baz'] };
|
|
var objectB = { bar: { biz: { net: 'qux'} }, qux: ['biz', 'ban'] };
|
|
var objectC = { bar: { biz: { net: 'qux', lee: 'sox' } }, qux: ['biz', 'rep'], foo: 'bar' };
|
|
|
|
defaultsDeep(objectA, objectB, objectC);
|
|
// => { bar: { biz: { net: 'qux', qox: 'fuc', lee: 'sox' } }, qux: ['baz'], foo: 'bar' }
|
|
```
|
|
|
|
###How
|
|
Incredibly simple:
|
|
```js
|
|
"use strict";
|
|
const _ = require("lodash");
|
|
module.exports = function () {
|
|
let output = {};
|
|
_.toArray(arguments).reverse().forEach(item=> {
|
|
_.mergeWith(output, item, (objectValue, sourceValue) => {
|
|
return _.isArray(sourceValue) ? sourceValue : undefined;
|
|
});
|
|
});
|
|
return output;
|
|
};
|
|
``` |