javascript - 多级对象 - 基于键的破坏性合并
问题描述
我有两个对象。基本上是模型和数据的情况。无法弄清楚如何递归删除数据对象中已从模型中删除的项目。
首先是型号:
var foo = {
"title": "Enter title",
"info": {
"released": "Enter year",
"runtime": "Enter time"
}
}
另一个是数据:
var bar = {
"title": "Forrest Gump",
"info": {
"released": "1994",
"runtime": "02:22",
"awards": "3"
}
"genre": "Drama/Comedy-drama"
}
我正在尝试在两个对象之间进行通用比较,这将导致:
var bar = {
"title": "Forrest Gump",
"info": {
"released": "1994",
"runtime": "02:22"
}
}
任何帮助将不胜感激!
如果它能够添加存在于蓝图中但不存在于数据中的对象键+值,那将是一个超级奖励。我有那个单独的工作,但这将是一个不错的奖励!
解决方案
一个递归函数Object.keys
应该可以完美地工作:
var foo = {
"title": "Enter title",
"info": {
"released": "Enter year",
"runtime": "Enter time"
}
};
var bar = {
"title": "Forrest Gump",
"info": {
"released": "1994",
"runtime": "02:22",
"awards": "3"
},
"genre": "Drama/Comedy-drama"
}
function getBoth(base, data) {
var result = {};
Object.keys(base).forEach(key => {
if (typeof base[key] == "object" && data[key]) {
result[key] = getBoth(base[key], data[key]);
} else if (data[key]) {
result[key] = data[key];
}
});
return result;
}
console.log(getBoth(foo, bar));
推荐阅读
- python - 如何使用 Python 捕获扩展循环的第一个元素?
- android - 导航到目的地的弹出片段
- neo4j - 在 Neo4j 中加载 csv,并将节点和关系放在一个 csv 文件中
- r - 错误:R Studio 的 Google 授权“暂时禁用登录”
- business-process-management - Camunda:如何在没有指示的情况下重新启动过程
- mysql - MYSQL:我应该在这里使用什么样的连接?
- arrays - 如何在 vuejs/vuetify 中显示路径在 json fake server 中的图像?
- apache-kafka - KafkaTemplate 用于 Spring-Kafka 中的死信处理程序
- c++ - Mingw32-make 失败并出现“找不到路径”错误
- cuda - 与 cuda 合作组的僵局