【发布时间】:2016-07-14 13:22:15
【问题描述】:
我正在使用 javascript 对象文字,并获得了一个绝妙的想法,即通过抽象所有常见属性来简化我必须使用的实际对象文字。
因此,我想从基线预定义对象结构扩展/继承/合并我的具体对象。 我的意思是这样的:
基线:
{
"id":"",
"options":[
{
"1":true,
"concreteValue":"important"
},
{
"2":false,
"concreteValue":"unimportant"
},
{
"3":true,
"concreteValue":"important"
}
],
"greeting":"Howdy",
"player":{
"name":"",
"hp":1,
"mana":10
}
}
混凝土:
{
"id":"player1",
"options":[
{
"5":true,
"concreteValue":"awesome"
}
],
"greeting":"Greetings!",
"player":{
"name":"player1",
"hp":15
}
}
通过扩展/继承/合并concrete 和baseline,我希望输出是这样的:
{
"id":"player1",
"options":[
{
"1":true,
"concreteValue":"important"
},
{
"2":false,
"concreteValue":"unimportant"
},
{
"3":true,
"concreteValue":"important"
},
{
"5":true,
"concreteValue":"awesome"
}
],
"greeting":"Greetings!",
"player":{
"name":"player1",
"hp":15,
"mana":10
}
}
因此,两个地方都存在的值会被具体的值覆盖,不存在的值会被添加。 这似乎是一种很好的做事方式,所以我确信有一种聪明的方式来做这件事,我还没有找到:) 我查看了jQuery Extend,但它似乎没有将同名的值相互合并。
我尝试使用concat 和Object.Assign,但它们也没有成功。
有人有什么想法吗?
【问题讨论】:
-
JavaScript 中没有针对您想要的行为的内置解决方案。要实现最终的合并对象,您需要迭代
concrete中的键。 -
顺便说一句,这和JSON完全没有关系,它只不过是一种序列化格式。你在谈论 JavaScript 对象字面量。
标签: javascript jquery software-design