Angularjs Merge Two Objects Ignoring Null And Missing Values
For instance, from these two objects : var object1 = { 'color': 'yellow', 'size' : null, 'age' : 7, 'weight' : null } var object2 = { 'color': 'blue', 'siz
Solution 1:
You can remove the null properties in object 2 before calling the extend.
var myApp = angular.module('myApp',[]);
var object1 = {
"color": "yellow",
"size" : null,
"age" : 7,
"weight" : null
}
var inside = {
"name": "me",
"age" : 9,
"nothing": null
}
var object2 = {
"color": "blue",
"size" : 51,
"age" : null,
"inside" : inside
}
functionremoveNullIn(prop, obj)
{
var pr = obj[prop];
if(pr === null || pr === undefined) delete obj[prop];
elseif(typeof pr === 'object') for (var i in pr) removeNullIn(i, pr);
}
functionremoveNull(obj)
{
for (var i in obj) {
removeNullIn(i, obj);
}
}
removeNull(object2);
var mergedObject = angular.extend(object1, object2);
console.log(mergedObject);
<scriptsrc="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>
Solution 2:
You can use this function as custom extend mechanism instead of native angular.extend.
/**
* Extends dst with props from src
* @see
* customExtend({a: 1, test : 1}, {b: 1, test : 2});
* //this will return {a: 1, b: 1, test: 2}
* @returns {Object}
*/var customExtend = function (/* [emptyObject], dst, src */) {
var$$args = Array.prototype.slice.call(arguments, 0);
if ($$args.length === 3) {
$$args.shift();
}
for (var i in $$args[1]) {
if ($$args[1][i] !== null || angular.isUndefined($$args[1][i])) {
$$args[0][i] = $$args[1][i];
}
}
return$$args[0];
};
angular.customExtend = customExtend;
Post a Comment for "Angularjs Merge Two Objects Ignoring Null And Missing Values"