Skip to content

Instantly share code, notes, and snippets.

@selvagsz
Last active August 29, 2015 13:56
Show Gist options
  • Save selvagsz/9021756 to your computer and use it in GitHub Desktop.
Save selvagsz/9021756 to your computer and use it in GitHub Desktop.
var mergeItem = function(item){
if(Em.typeOf(item) === 'object') {
item = merge({}, item);
} else if(Em.typeOf(item) === 'array') {
item = mergeArray(item);
}
return item;
};
var mergeArray = function(arr) {
var i, newArray = [],
len = arr.length;
for(i=0; i<len; ++i) {
var value = mergeItem(arr[i]);
newArray.push(value);
}
return newArray;
};
var merge = Ember.merge = function(original, updates) {
for (var prop in updates) {
if (updates.hasOwnProperty(prop)) {
var value = mergeItem(updates[prop]);
original[prop] = value;
}
}
return original;
};
//Example
var job = {
name: 'emberjs',
firstLevel: {
name: 'levelOne',
levelOneArray: [1,2,3],
secondLevel: {
secondLevelArray: [{name: 'one'}, {name: 'two'}]
}
}
};
var job1 = Em.merge({oldName: 'sproutcore'}, job);
job1.firstLevel.levelOneArray[0] = 5;
job1.firstLevel.secondLevel.secondLevelArray[0].name = 'changed';
console.log(job.firstLevel.levelOneArray[0], job1.firstLevel.levelOneArray[0]); // 1,5
console.log(job.firstLevel.secondLevel.secondLevelArray[0].name, job1.firstLevel.secondLevel.secondLevelArray[0].name); //'one', "changed"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment