Google Interview Question
Software EngineersCountry: United States
Why not use a self-referential function ?
function deepCopy (obj) {
var copy = {},
properties = Object.getOwnPropertyNames(obj);
for (var i = 0; i < properties.length; i++) {
copy[properties[i]] = typeof properties[i] === "object" ? deepCopy(obj[properties[i]]) : obj[properties[i]];
}
return copy;
}
Why not use a self-referential function ?
function deepCopy (obj) {
var copy = {},
properties = Object.getOwnPropertyNames(obj);
for (var i = 0; i < properties.length; i++) {
copy[properties[i]] = typeof properties[i] === "object" ? deepCopy(obj[properties[i]]) : obj[properties[i]];
}
return copy;
}
struct DPNode
{
int val;
vector<DPNode*> cons;
};
DPNode* Copy(DPNode* node) {
DPNode* cNode = new DPNode{ node->val, {} };
return cNode;
}
DPNode* DeepTreeCopy(DPNode* node)
{
auto cNode = Copy(node);
for (DPNode* child : node->cons) {
auto cChild = DeepTreeCopy(child);
cNode->cons.push_back(cChild);
}
return cNode;
}
void DPCopyTest()
{
DPNode aa{ 4, {} };
DPNode ab{ 5, {} };
DPNode ba{ 6, {} };
DPNode bb{ 7, {} };
DPNode a{ 2, {&aa, &ab} };
DPNode b{ 3, {&ba, &bb} };
DPNode root{ 1, { &a, &b } };
auto cRoot = DeepTreeCopy(&root);
}
var clone = function(obj){
var ret = {};
for(var prop : obj){
ret[prop] = obj[prop];
}
return ret;
};
var deepCopy = function(obj){
var ret = { read: true };
for(var prop : obj){
if(typeof prop === 'object' && !prop.read){
ret[prop] = deepCopy(prop);
}
else{
ret[prop] = obj[prop];
}
}
};
function DeepCopy(oOldObject)
{
var oNewObject = {};
for(var sMember in oOldObject)
{
if(typeof(oOldObject[sMember]) != "object")
oNewObject[sMember] = oOldObject[sMember];
else if(Array.isArray(oOldObject[sMember])) // Array
{
oNewObject[sMember] = new Array();
for(var i=0; i<oOldObject[sMember].length; i++)
oNewObject[sMember][i] = typeof(oOldObject[sMember][i]) != "object" ?
oOldObject[sMember][i] :
DeepCopy(oOldObject[sMember][i]);
}
else
oNewObject[sMember] = DeepCopy(oOldObject[sMember])
}
return oNewObject;
}
function DeepCopy(oOldObject)
{
var oNewObject = {};
for(var sMember in oOldObject)
{
if(typeof(oOldObject[sMember]) != "object")
oNewObject[sMember] = oOldObject[sMember];
else if(Array.isArray(oOldObject[sMember])) // Array
{
oNewObject[sMember] = new Array();
for(var i=0; i<oOldObject[sMember].length; i++)
oNewObject[sMember][i] = typeof(oOldObject[sMember][i]) != "object" ?
oOldObject[sMember][i] :
DeepCopy(oOldObject[sMember][i]);
}
else
oNewObject[sMember] = DeepCopy(oOldObject[sMember])
} // for
return oNewObject;
}
- coolguy August 16, 2015