Angularjs合并两个对象忽略空和缺失值 [英] Angularjs merge two objects ignoring null and missing values

查看:179
本文介绍了Angularjs合并两个对象忽略空和缺失值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有关例如由这两个对象

  VAR object1 = {
    色:黄,
    大小:空,
    时代:7,
    重:空
}VAR = Object2的{
    色:蓝,
    大小:51,
    时代:空
}

我想这(对象2覆盖对象1,除了空的属性或属性,他不具有):

  {
    色:蓝,
    大小:51,
    时代:7,
    重:空
}

angular.extend(object1,Object2的)的作品,但覆盖的年龄属性设置为null。


解决方案

您可以调用扩展之前删除对象2空属性。

\r
\r

VAR对myApp = angular.module('对myApp',[]);\r
\r
VAR object1 = {\r
    色:黄,\r
    大小:空,\r
    时代:7,\r
    重:空\r
}\r
\r
VAR内部= {\r
    名:我,\r
    时代:9,\r
    无中生有:空\r
}\r
\r
VAR = Object2的{\r
    色:蓝,\r
    大小:51,\r
    时代:空,\r
    内:内\r
}\r
\r
功能removeNullIn(道具,OBJ)\r
{\r
  VAR PR = OBJ [道具]\r
  如果(PR ===空|| PR ===未定义)删除OBJ [道具]\r
  否则,如果(typeof运算PR ==='对象')为(VAR我在PR)removeNullIn(I,PR);\r
}\r
\r
功能removeNull(OBJ)\r
{\r
    对于(OBJ中我VAR){\r
        removeNullIn(I,OBJ);\r
    }\r
}\r
\r
removeNull(Object2的);\r
\r
VAR mergedObject = angular.extend(object1,Object2的);\r
的console.log(mergedObject);

\r

&LT;脚本src=\"https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js\"></script>\r
\r
\r

For instance, from these two objects :

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

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

I want this (object 2 overrides object 1 except for null properties or properties he doesn't have) :

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

angular.extend(object1, object2) works but overrides age property to null

解决方案

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
}

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>

这篇关于Angularjs合并两个对象忽略空和缺失值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆