Javascript 将对象差异添加到";对",;位置
我的服务器有一个不同的对象,需要将其合并到本地表示中。 因此,我需要一种方法来添加对象的一部分,该部分当前在原始表示中未定义 例如:Javascript 将对象差异添加到";对",;位置,javascript,jquery,performance,Javascript,Jquery,Performance,我的服务器有一个不同的对象,需要将其合并到本地表示中。 因此,我需要一种方法来添加对象的一部分,该部分当前在原始表示中未定义 例如: // The serverresponse { "PRIVATE": { "SCREENS": { "WORKSPACE": { "POSTS": { "1363391397125": { "TGT": "13633906
// The serverresponse
{
"PRIVATE": {
"SCREENS": {
"WORKSPACE": {
"POSTS": {
"1363391397125": {
"TGT": "1363390641817",
"ACN": "position",
"TO": [
57.1875,
69.21182266009852
]
}
}
}
}
}
}
// This part is similar to my local representation
{
"PRIVATE": {
"SCREENS": {
"WORKSPACE": {
"POSTS": {}
}
}
}
// So I want to insert this part of the given data at same position inside the local data
{
"1363391397125": {
"TGT": "1363390641817",
"ACN": "position",
"TO": [
57.1875,
69.21182266009852
]
}
}
有很多不同的部分需要插入,因此我正在寻找一个明确的替代方案,以针对我将要使用的每个案例进行迭代。看到您添加了jQuery标记,您可以使用jQuery的方法,类似于下面的方法:
// The serverresponse
var x = {
"PRIVATE": {
"SCREENS": {
"WORKSPACE": {
"POSTS": {
"1363391397125": {
"TGT": "1363390641817",
"ACN": "position",
"TO": [
57.1875,
69.21182266009852]
}
}
}
}
}
};
// This part is similar to my local representation
var y = {
"PRIVATE": {
"SCREENS": {
"WORKSPACE": {
"POSTS": {}
}
}
}
};
// merges x into y
$.extend(y, x);
// use $.extend(x, y); if you intended it to be the other way around.
演示-使用
$.extend()
合并对象
看到您添加了jQuery标记,您可以使用jQuery的方法,如下所示:
// The serverresponse
var x = {
"PRIVATE": {
"SCREENS": {
"WORKSPACE": {
"POSTS": {
"1363391397125": {
"TGT": "1363390641817",
"ACN": "position",
"TO": [
57.1875,
69.21182266009852]
}
}
}
}
}
};
// This part is similar to my local representation
var y = {
"PRIVATE": {
"SCREENS": {
"WORKSPACE": {
"POSTS": {}
}
}
}
};
// merges x into y
$.extend(y, x);
// use $.extend(x, y); if you intended it to be the other way around.
演示-使用
$.extend()
合并对象
那么您想合并这两个对象,但仅将以前未在原始对象中定义的属性放入原始对象中?如果该属性在原始文件中已经存在,即使服务器响应中出现不同的值,也不要使用它?因此,您希望合并这两个对象,但只有在原始文件中以前未定义属性时才将其放入原始文件中?如果该属性已经存在于原始文件中,即使服务器响应中出现不同的值,也不要使用它。我认为
$.extend()
并不能完全满足OP的要求(尽管他们的问题并不十分清楚)。我在上面的评论中要求澄清OP的问题,但我认为他们只想在原始对象还没有该属性的情况下,从新对象将内容放入原始对象。@jfriend00:+1。如果涉及更多的检查,并且只有一些部分需要合并,那么$.extend()
将是泛型的,我将不得不重新考虑我的答案。@François Wahl THX正是我所需要的。很长时间没有使用extend。@Bernhard:extend()
非常通用,如果您在POSTS
中已经有数据,例如在y
对象中,它将丢失并被x
对象中的POSTS
覆盖。要保留现有数据,您必须单独合并每个子对象,类似于:$.extend(y.PRIVATE.SCREENS.WORKSPACE.POSTS,x.PRIVATE.SCREENS.WORKSPACE.POSTS)代码>我相信你可以写一个重新草书的方法,它迭代每个对象和子对象,并在每个对象上使用extend()
。对,还需要未设置的部分,所以我认为“强制”扩展是我最终需要的。但是extend是正确的工作点,我认为我不认为$。extend()
完全符合OP的要求(尽管他们的问题并不十分清楚)。我在上面的评论中要求澄清OP的问题,但我认为他们只想在原始对象还没有该属性的情况下,从新对象将内容放入原始对象。@jfriend00:+1。如果涉及更多的检查,并且只有一些部分需要合并,那么$.extend()
将是泛型的,我将不得不重新考虑我的答案。@François Wahl THX正是我所需要的。很长时间没有使用extend。@Bernhard:extend()
非常通用,如果您在POSTS
中已经有数据,例如在y
对象中,它将丢失并被x
对象中的POSTS
覆盖。要保留现有数据,您必须单独合并每个子对象,类似于:$.extend(y.PRIVATE.SCREENS.WORKSPACE.POSTS,x.PRIVATE.SCREENS.WORKSPACE.POSTS)代码>我相信你可以写一个重新草书的方法,它迭代每个对象和子对象,并在每个对象上使用extend()
。对,还需要未设置的部分,所以我认为“强制”扩展是我最终需要的。但我认为扩展是正确的工作点