Gle*_*ven 20 javascript arrays merge
如果我有一个javascript对象/ assoc.数组定义如下:
function somefunction(options) {
var defaults = {
prop1: 'foo',
prop2: 'bar'
};
//Do stuff here
}
Run Code Online (Sandbox Code Playgroud)
我想用它作为函数的默认值.因此,当函数被调用时,我想用options变量填充变量in defaults,但前提是它们不存在options.
所以我们可以说这是被称为
somefunction({ prop1: 'fish' });
Run Code Online (Sandbox Code Playgroud)
如何才能使它options与defaults我合并,以便我得到它
{
prop1: 'fish',
prop2: 'bar'
}
Run Code Online (Sandbox Code Playgroud)
TML*_*TML 42
重新阅读问题后,我意识到你可能正在寻找更像这样的东西:
var a = { 'foo': 'bar', 'baz': 'bat' };
var b = { 'foo': 'quux' };
for (var prop in a) {
if (prop in b) { continue; }
b[prop] = a[prop];
}
Run Code Online (Sandbox Code Playgroud)
cgp*_*cgp 12
您可以查看jQuery或Prototypes 扩展功能.
它看起来像这样:(直接取自jQuery)
jQuery.extend = jQuery.fn.extend = function() {
// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !jQuery.isFunction(target) )
target = {};
// extend jQuery itself if only one argument is passed
if ( length == i ) {
target = this;
--i;
}
for ( ; i < length; i++ )
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null )
// Extend the base object
for ( var name in options ) {
var src = target[ name ], copy = options[ name ];
// Prevent never-ending loop
if ( target === copy )
continue;
// Recurse if we're merging object values
if ( deep && copy && typeof copy === "object" && !copy.nodeType )
target[ name ] = jQuery.extend( deep,
// Never move original objects, clone them
src || ( copy.length != null ? [ ] : { } )
, copy );
// Don't bring in undefined values
else if ( copy !== undefined )
target[ name ] = copy;
}
// Return the modified object
return target;
};
Run Code Online (Sandbox Code Playgroud)