【发布时间】:2018-08-07 11:16:21
【问题描述】:
如何将以下对象合并为一个:
对象一
{"risks": [
{
"forests_wildlife": ["The landscape"],
"other": ["Something here"]
}
]}
对象二
{"riskDetails": [
{
"forests_wildlife": "The landscape",
"affected_people": "1000-10,000",
"affected_wildlife": "2-5 wildlife populations"
},
{
"other": "Custom",
"affected_people": "100-1000",
"affected_wildlife": "5-10 wildlife populations"
}
]}
期望的输出
{"risks": [
{
"forests_wildlife": [
{
"The landscape" : {
"riskDetails": {
"affected_people": "1000-10,000",
"affected_wildlife": "2-5 wildlife populations"
}
}
}
],
"other": [
{
"Custom something" : {
"riskDetails": {
"affected_people": "100-1000",
"affected_wildlife": "5-10 wildlife populations"
}
}
}
]
},...
]}
我非常感谢任何帮助。只要解决方案有效,Lodash 或没有 lodash 就可以了。
编辑:
我认为,出于我的目的,我实际上不必将两者组合成一个对象,而可以只检查第一个中的每个项目并在第二个中找到匹配项。这是我想出的对我有用的 sn-p:
const riskCategory = data.risks;
const riskDetails = data.riskDetails;
return _.map(riskCategory, category => {
return _.map(category, (risk, key) => {
return _.map(risk, (item, index) => {
var details = _.find(riskDetails, _.matchesProperty( key, item ));
if ( details ) {
return (
<tr key={index}>
<td> {item} </td>
<td> {details.affected_people} </td>
<td> {details.affected_wildlife} </td>
</tr>
);
}
return;
});
});
});
这是一个嵌套地图,在中间的某处查找和匹配,以便能够到达第二个对象的最里面。也许还有另一种更清洁、更优雅的方法。我是 javascript 新手,我发现 lodash 帮助我让我的生活更轻松一些,但我不想过分依赖它。
【问题讨论】:
-
感觉有点像你在要求别人为你写一个函数,这并不是 Stack Overflow 应该如何工作的。如果您编写的函数不起作用,那么您应该在答案中包含它,以及它不起作用的方式。然后您可能会收到更多回复。
-
我已经编辑了我的问题以添加我正在研究的解决方案。谢谢。
标签: javascript object merge lodash