差异和交换默认和实际响应之间的JSON值

时间:2015-10-05 04:15:57

标签: javascript json traversal javascript-objects

我有2个JSON对象默认实际,它们可以是NESTED。我想编写一个javascript算法来比较和交换默认值和实际值之间的值。但我陷入困境,只能处理JSON的最外层

以下是示例:

默认值:

{
   username : "string",
   phone    : null,
   school   : "string",
   GPA      : {
     major  : null,
     minor  : null
   }
}

实际:

{
   username : "David",
   phone    : 12345,
   school   : "Harvard",
   password : "david@harvard"
   GPA      : {
     major  : 3.9
   }
}    

在差异和交换价值之后,结果应为:

{
   username : "David",
   phone    : 12345,
   school   : "Harvard",
   GPA      : {
      major : 3.9,
      mimor : null
   }
}

这个想法是默认模型,如果响应有额外的属性,如密码,算法应该删除这样的属性。

另一方面,如果响应没有require属性,则算法应填写默认值。

因此,最终结果应仅包含在默认模型中定义的键,并且值将来自响应,如果键不存在则使用默认键值对。

1 个答案:

答案 0 :(得分:1)

如果你可以使用jQuery,那么$ .extend()可以用来完成这个。

var def = {
   username : "string",
   phone    : null,
   school   : "string",
   GPA      : {
     major  : null,
     minor  : null
   }
}

var actual = {
   username : "David",
   phone    : 12345,
   school   : "Harvard",
   password : "david@harvard",
   GPA      : {
     major  : 3.9
   }
}

var extended = $.extend(true, {}, def, actual);

这是一个应该证明这一点的jsfiddle。 https://jsfiddle.net/38L808y1/