Friday, May 10, 2024
 Popular · Latest · Hot · Upcoming
11
rated 0 times [  14] [ 3]  / answers: 1 / hits: 18668  / 15 Years ago, fri, may 22, 2009, 12:00:00

If I have a javascript object/assoc. array defined like this:



function somefunction(options) {

var defaults = {
prop1: 'foo',
prop2: 'bar'
};

//Do stuff here

}


and I want to use this as the default values for the function. So when the function gets called I want to populate the options variable with the values in defaults, but only if they don't exist in options.



So lets say that this was called



somefunction({ prop1: 'fish' });


How can I make it so that options gets merged with defaults such that I get this



{
prop1: 'fish',
prop2: 'bar'
}

More From » arrays

 Answers
7

You could look at either jQuery's or Prototypes extend functionality.



It looks like this: (taken directly from 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;
};

[#99476] Tuesday, May 19, 2009, 15 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
lara

Total Points: 462
Total Questions: 100
Total Answers: 102

Location: Jersey
Member since Mon, Jun 14, 2021
3 Years ago
lara questions
;