1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
{{alias}}( target, ...source )
Merges objects into a target object.
The target object is mutated.
Only plain objects are merged and extended. Other values/types are either
deep copied or assigned.
Support for deep merging class instances is inherently fragile.
`Number`, `String`, and `Boolean` objects are merged as primitives.
Functions are not deep copied.
Parameters
----------
target: Object
Target object.
source: ...Object
Source objects (i.e., objects to be merged into the target object).
Returns
-------
out: Object
Merged (target) object.
Examples
--------
> var target = { 'a': 'beep' };
> var source = { 'a': 'boop', 'b': 'bap' };
> var out = {{alias}}( target, source )
{ 'a': 'boop', 'b': 'bap' }
> var bool = ( out === target )
true
{{alias}}.factory( options )
Returns a function for merging and extending objects.
Parameters
----------
options: Object
Options.
options.level: integer (optional)
Merge level. Default: Infinity.
options.copy: boolean (optional)
Boolean indicating whether to deep copy merged values. Deep copying
prevents shared references and source object mutation. Default: true.
options.override: boolean|Function (optional)
Defines the merge strategy. If `true`, source object values will always
override target object values. If `false`, source values never override
target values (useful for adding, but not overwriting, properties). To
define a custom merge strategy, provide a function. Default: true.
options.extend: boolean (optional)
Boolean indicating whether new properties can be added to the target
object. If `false`, only shared properties are merged. Default: true.
Returns
-------
fcn: Function
Function which can be used to merge objects.
Examples
--------
> var opts = {
... 'level': 100,
... 'copy': true,
... 'override': true,
... 'extend': true
... };
> var merge = {{alias}}.factory( opts )
<Function>
// Set the `level` option to limit the merge depth:
> merge = {{alias}}.factory( { 'level': 2 } );
> var target = {
... '1': { 'a': 'beep', '2': { '3': null, 'b': [ 5, 6, 7 ] } }
... };
> var source = {
... '1': { 'b': 'boop', '2': { '3': [ 1, 2, 3 ] } }
... };
> var out = merge( target, source )
{ '1': { 'a': 'beep', 'b': 'boop', '2': { '3': [ 1, 2, 3 ] } } }
// Set the `copy` option to `false` to allow shared references:
> merge = {{alias}}.factory( { 'copy': false } );
> target = {};
> source = { 'a': [ 1, 2, 3 ] };
> out = merge( target, source );
> var bool = ( out.a === source.a )
true
// Set the `override` option to `false` to preserve existing properties:
> merge = {{alias}}.factory( { 'override': false } );
> target = { 'a': 'beep', 'b': 'boop' };
> source = { 'a': null, 'c': 'bop' };
> out = merge( target, source )
{ 'a': 'beep', 'b': 'boop', 'c': 'bop' }
// Define a custom merge strategy:
> function strategy( a, b, key ) {
... // a => target value
... // b => source value
... // key => object key
... if ( key === 'a' ) {
... return b;
... }
... if ( key === 'b' ) {
... return a;
... }
... return 'bebop';
... };
> merge = {{alias}}.factory( { 'override': strategy } );
> target = { 'a': 'beep', 'b': 'boop', 'c': 1234 };
> source = { 'a': null, 'b': {}, 'c': 'bop' };
> out = merge( target, source )
{ 'a': null, 'b': 'boop', 'c': 'bebop' }
// Prevent non-existent properties from being added to the target object:
> merge = {{alias}}.factory( { 'extend': false } );
> target = { 'a': 'beep', 'b': 'boop' };
> source = { 'b': 'hello', 'c': 'world' };
> out = merge( target, source )
{ 'a': 'beep', 'b': 'hello' }
See Also
--------
|