2015-02-12 6 views
8

उदाहरण के लिए अनदेखी, इन दो वस्तुओं से:AngularJS विलय दो वस्तुओं बातिल और लापता मूल्यों

var object1 = { 
    "color": "yellow", 
    "size" : null, 
    "age" : 7, 
    "weight" : null 
} 

var object2 = { 
    "color": "blue", 
    "size" : 51, 
    "age" : null 
} 

मैं इस (वस्तु 2 ओवरराइड अशक्त गुण या गुण वह नहीं है के लिए छोड़कर आपत्ति 1) हैं:

{ 
    "color": "blue", 
    "size" : 51, 
    "age" : 7, 
    "weight" : null 
} 

angular.extend (object1, object2) काम करता है लेकिन उम्र संपत्ति को ओवरराइड करता है शून्य पर

+0

जो आपको मैन्युअल रूप से –

उत्तर

10

आप विस्तार कॉल करने से पहले वस्तु 2 में अशक्त गुण निकाल सकते हैं।

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 
 
} 
 

 
function removeNullIn(prop, obj) 
 
{ 
 
    var pr = obj[prop]; 
 
    if(pr === null || pr === undefined) delete obj[prop]; 
 
    else if(typeof pr === 'object') for (var i in pr) removeNullIn(i, pr); 
 
} 
 

 
function removeNull(obj) 
 
{ 
 
    for (var i in obj) { 
 
     removeNullIn(i, obj); 
 
    } 
 
} 
 

 
removeNull(object2); 
 

 
var mergedObject = angular.extend(object1, object2); 
 
console.log(mergedObject);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>

+0

को हटाने के लिए है, क्या यह दोबारा काम करेगा? – TrtG

+0

मैंने रिक्त रूप से काम करने के लिए removeNull फ़ंक्शन को संशोधित किया है, आप इसे देख सकते हैं। –

2

आप इस समारोह कस्टम के रूप में देशी 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; 
संबंधित मुद्दे