2016-01-13 17:09:54 +01:00

65 lines
1.4 KiB
JavaScript

/*global define*/
define(
function () {
// http://stackoverflow.com/a/6491621/229189
function getObjectByString ( str, obj ) {
if ( typeof str === 'string' ) {
str = str.replace( /\[(\w+)\]/g, '.$1' ); // convert indexes to properties
str = str.replace( /^\./, '' ); // strip a leading dot
var keys = str.split( '.' );
for ( var i = 0, len = keys.length; i < len; ++i ) {
var key = keys[i];
if ( key in obj ) {
obj = obj[key];
} else {
return;
}
}
}
return obj;
}
function getCopy ( obj ) {
return JSON.parse( JSON.stringify( obj ) );
}
function isEqual ( obj1, obj2 ) {
return JSON.stringify( obj1 ) === JSON.stringify( obj2 );
}
// http://stackoverflow.com/a/383245/229189
// add missing properties from obj2
function merge ( obj1, obj2 ) {
obj1 = getCopy( obj1 );
obj2 = getCopy( obj2 );
for ( var p in obj2 ) {
try {
// Property in destination object set; update its value.
if ( typeof obj2[p] === 'object' ) {
obj1[p] = merge( obj1[p], obj2[p] );
} else {
if ( typeof obj1[p] === 'undefined' && typeof obj2[p] !== 'undefined' ) {
obj1[p] = obj2[p];
}
}
} catch ( e ) {
obj1[p] = obj2[p];
}
}
return obj1;
}
return {
getObjectByString: getObjectByString,
getCopy: getCopy,
merge: merge,
isEqual: isEqual
};
}
);