考虑这样的情况:我有两个复杂的jsons - 一个有完整的属性列表,另一个在理论上是相同的,但可能缺少一些值。我需要使用部分值覆盖第一个中的值。
我怎样才能做到这一点?我试过这样的事情:
function ObjectValues(data) {
var isArray = data instanceof Array;
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (typeof (data[key]) == "object") {
if (!isArray) {
profileData[key] = data[key];
}
ObjectValues(data[key]);
} else if (!isArray) {
}
}
}
}
ObjectValues(data);
这个想法是遍历部分json(数据)并覆盖profileData中的相应值。这个函数可以循环遍历结构(只要对象中有一个对象,它就会在这个级别上自动启动),但我不知道如何让它覆盖每个级别的值,如profileData [key] = data [key]不够
编辑: 一个简单的例子是:
Data = {
"activity": {
"online": [1,1,3,4,0,1,0,3,2],
}
},
"location": "Antarctica",
}
profileData = {
"activity": {
"online": [],
}
},
"location": "N/A",
}
现在,我得到
profileData = {
"activity": {
"online": [],
}
},
"online": [1,1,3,4,0,1,0,3,2],
"location": "Antarctica",
}
它在第一级工作正常,但是它显然只是向根添加更深的键(正如您所期望的那样)。问题是检索子项中的关键路径。
答案 0 :(得分:1)
如果您可以使用JQuery,那么您只需调用extend而不是尝试编写自己的方法,
$.extend(true, profileData, data);
这将使用partialData
中的值覆盖data
中的值,并添加data
中的任何额外键。