I am looking for a javascript function
like PHP array_merge_recursive()
.
From what I've read, there is no such thing in javascript, and I want to know how I can implement something similar.
The problem:
I have two objects
:
var obj1 = {
"AUDCAD": {
"t": [1439238600, 1439238600],
"o": [0.9646, 0.9646],
"h": [0.9646, 0.9646],
"l": [0.9645, 0.9645],
"c": [0.9645, 0.9645],
"v": [15, 15]
},
"AUDCHF": {
"t": [1439238600, 1439238600],
"o": [0.7291, 0.7291],
"h": [0.7292, 0.7292],
"l": [0.729, 0.729],
"c": [0.7291, 0.7291],
"v": [6, 6]
}
};
var obj2 = {
"AUDCAD": {
"t": [111],
"o": [111],
"h": [111],
"l": [111],
"c": [111],
"v": [111]
},
"AUDCHF": {
"t": [111],
"o": [111],
"h": [111],
"l": [111],
"c": [111],
"v": [111]
}
};
Of those objects
I need to create a new one like this:
var obj3 = {
"AUDCAD": {
"t": [1439238600, 1439238600, 111], //Note that the value "111" is added from obj2 to the end of obj1.
"o": [0.9646, 0.9646, 111],
"h": [0.9646, 0.9646, 111],
"l": [0.9645, 0.9645, 111],
"c": [0.9645, 0.9645, 111],
"v": [15, 15, 111]
},
"AUDCHF": {
"t": [1439238600, 1439238600, 111],
"o": [0.7291, 0.7291, 111],
"h": [0.7292, 0.7292, 111],
"l": [0.729, 0.729, 111],
"c": [0.7291, 0.7291, 111],
"v": [6, 6, 111]
}
}
What im doing:
/*
Code seen here:
http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically
Author: Scdev
*/
function extendObjects() {
var newObject = {};
var overwriteValues = false;
var overwriteObjects = false;
for (var indexArgument = 0; indexArgument < arguments.length; indexArgument++) {
if (typeof arguments[indexArgument] !== 'object') {
if (arguments[indexArgument] == 'overwriteValues_True') {
overwriteValues = true;
} else if (arguments[indexArgument] == 'overwriteValues_False') {
overwriteValues = false;
} else if (arguments[indexArgument] == 'overwriteObjects_True') {
overwriteObjects = true;
} else if (arguments[indexArgument] == 'overwriteObjects_False') {
overwriteObjects = false;
}
} else {
extendObject(arguments[indexArgument], newObject, overwriteValues, overwriteObjects);
}
}
function extendObject(object, extendedObject, overwriteValues, overwriteObjects) {
for (var indexObject in object) {
if (typeof object[indexObject] === 'object') {
if (typeof extendedObject[indexObject] === "undefined" || overwriteObjects) {
extendedObject[indexObject] = object[indexObject];
}
extendObject(object[indexObject], extendedObject[indexObject], overwriteValues, overwriteObjects);
} else {
if (typeof extendedObject[indexObject] === "undefined" || overwriteValues) {
extendedObject[indexObject] = object[indexObject];
}
}
}
return extendedObject;
}
return newObject;
}
var newExtendedObject = extendObjects('overwriteValues_False', 'overwriteObjects_False', obj1, obj2);
I am using nodejs and I have tried without success with some libraries, I've also read some similar questions here but not found a solution to my problem. Any suggestions on how I can solve? Thanks everyone for your time.
Temporal solution
Temporarily solved my problem with array.push()
//Pseudo-code
obj1[0]["AUDCAD"]["t"].push(obj2[0]["AUDCAD"]["t"]);