我有一个从URL获取的JSON数据。我要合并具有相同值的数据,下面是示例数据。我已经通过Internet搜索了,但是没有解决方案。我发现的只是用于相同的键。
.targets
我想将 [ {
"banana": [
{
"color": yellow,
"size": "small"
},
{
"size": "medium"
},
{
"size": "large"
}
],
"process_name": "fruits"},{
"carnivores": [
{
"name": "lion"
},
{
"name": "tiger"
},
{
"name": "chetah"
},
{
"name": "dianosaur"
}
],
"process_name": "animal"}, {
"apple": [
{
"color": red,
"size": "large"
}
],
"process_name": "fruits"}]
的数据合并到一个数组中,如下所示,结果应该是
"process_name" :"fruits"
有人可以帮忙吗?
答案 0 :(得分:2)
只需一些片段即可开始
// data definition
const json_before = [ {
"banana": [
{
"color": "yellow",
"size": "small"
},
{
"size": "medium"
},
{
"size": "large"
}
],
"process_name": "fruits"},
{
"carnivores": [
{
"name": "lion"
},
{
"name": "tiger"
},
{
"name": "chetah"
},
{
"name": "dianosaur"
}
],
"process_name": "animal"},
{
"apple": [
{
"color": "red",
"size": "large"
}
],
"process_name": "fruits"
}];
// processing
const json_after = json_before.reduce((arr, next) => {
const exist = arr.find(el => el.process_name === next.process_name);
if (exist) Object.assign(exist, next);
else arr.push(next);
return arr;
}, []);
// check
console.log(json_after);
主要思想是使用reduce
进行数组遍历。为了缩短处理代码,我使用了Object.assign
来修改以前添加的元素,尽管在实际代码中最好使用Object.keys
并手动检查先前对象的属性是否未被覆盖。 / p>
请注意,这正在使源数据变异(通过添加console.log(json_before)
进行检查)。同样,如果您不想这样做,则应该自己克隆每个元素,而无需直接分配对象。