Javascript 基于一个键合并多个对象数组
我需要通过一个键合并对象数组的列表。我试图在网上找到材料,但最终只合并了两个对象数组 但是我在一个数组中有多个对象数组Javascript 基于一个键合并多个对象数组,javascript,node.js,arrays,json,object,Javascript,Node.js,Arrays,Json,Object,我需要通过一个键合并对象数组的列表。我试图在网上找到材料,但最终只合并了两个对象数组 但是我在一个数组中有多个对象数组 response = [ [ { "topic": "Topic 1", "avgwk38": 5 }, { "topic": "Topic 2",
response = [
[
{
"topic": "Topic 1",
"avgwk38": 5
},
{
"topic": "Topic 2",
"avgwk38": 86
},
{
"topic": "Topic 3",
"avgwk38": 6
}
],
[
{
"topic": "Topic 1",
"avgwk39": 25
},
{
"topic": "Topic 2",
"avgwk39": 32
},
{
"topic": "Topic 3",
"avgwk39": 4
}
]
]
这是我的预期结果
[
{
"topic": "Topic 1",
"avgwk38": 5,
"avgwk39": 25
},
{
"topic": "Topic 2",
"avgwk38": 86,
"avgwk39": 32
},
{
"topic": "Topic 3",
"avgwk38": 6,
"avgwk39": 4
}
]
请帮助我解决此问题。您可以展平阵列并减少值
response.flat().reduce((acc,value)=>{
让existingValueIndex=acc.findIndex(obj=>obj.topic==value.topic);
如果(existingValueIndex==-1){
acc.push({…值});
返回acc;
}
acc[existingValueIndex]={
…acc[existingValueIndex],
价值
};
返回acc;
}, []);
如果你有大的阵列,效率就不高了。
您还可以使用
集合
跟踪主题名称并防止每次迭代都在数组中搜索。您可以展平数组并减少值
response.flat().reduce((acc,value)=>{
让existingValueIndex=acc.findIndex(obj=>obj.topic==value.topic);
如果(existingValueIndex==-1){
acc.push({…值});
返回acc;
}
acc[existingValueIndex]={
…acc[existingValueIndex],
价值
};
返回acc;
}, []);
如果你有大的阵列,效率就不高了。
您还可以使用
集合来跟踪主题名称,并防止每次迭代都在数组中搜索。这里是解决此问题的另一种方法,
使用唯一的主题创建主题对象,该主题包含每个主题项的属性
最后使用Object.values()
将其设置为数组
response = [
[
{
"topic": "Topic 1",
"avgwk38": 5
},
{
"topic": "Topic 2",
"avgwk38": 86
},
{
"topic": "Topic 3",
"avgwk38": 6
}
],
[
{
"topic": "Topic 1",
"avgwk39": 25
},
{
"topic": "Topic 2",
"avgwk39": 32
},
{
"topic": "Topic 3",
"avgwk39": 4
}
]
]
const响应=[
[
{
“主题”:“主题1”,
“avgwk38”:5
},
{
“主题”:“主题2”,
“avgwk38”:86
},
{
“主题”:“主题3”,
“avgwk38”:6
}
],
[
{
“主题”:“主题1”,
“avgwk39”:25
},
{
“主题”:“主题2”,
“avgwk39”:32
},
{
“主题”:“主题3”,
“avgwk39”:4
}
]
]
const obj=response.flat().reduce((acc,curr)=>{
如果(!acc[当前主题]){
acc[当前主题]={
…咖喱
}
}否则{
acc[当前主题]={
…根据[当前主题],
…咖喱
}
}
返回acc;
}, {});
console.log(Object.values(obj))代码>这里是解决此问题的另一种方法,
使用唯一的主题创建主题对象,该主题包含每个主题项的属性
最后使用Object.values()
将其设置为数组
response = [
[
{
"topic": "Topic 1",
"avgwk38": 5
},
{
"topic": "Topic 2",
"avgwk38": 86
},
{
"topic": "Topic 3",
"avgwk38": 6
}
],
[
{
"topic": "Topic 1",
"avgwk39": 25
},
{
"topic": "Topic 2",
"avgwk39": 32
},
{
"topic": "Topic 3",
"avgwk39": 4
}
]
]
const响应=[
[
{
“主题”:“主题1”,
“avgwk38”:5
},
{
“主题”:“主题2”,
“avgwk38”:86
},
{
“主题”:“主题3”,
“avgwk38”:6
}
],
[
{
“主题”:“主题1”,
“avgwk39”:25
},
{
“主题”:“主题2”,
“avgwk39”:32
},
{
“主题”:“主题3”,
“avgwk39”:4
}
]
]
const obj=response.flat().reduce((acc,curr)=>{
如果(!acc[当前主题]){
acc[当前主题]={
…咖喱
}
}否则{
acc[当前主题]={
…根据[当前主题],
…咖喱
}
}
返回acc;
}, {});
console.log(Object.values(obj))代码>这是否回答了您的问题?您将基于相同的主题
key-value/@NullDev合并对象我认为提供的解决方案仅限于2个数组(旧数组和新数组),这是否回答了您的问题?您将基于相同的主题
键值/@NullDev合并对象。我认为提供的解决方案仅限于2个数组(旧数组和新数组)。谢谢@PAG。这非常有效。我只有一个小数组,因为这是一个月视图,每个星期的平均值。谢谢@PAG这是一个魅力。我只有一个小数组,因为这是一个月视图,每个星期的平均值。谢谢mate@zb22。Spread运算符充当JSMate@zb22的超级电源。Spread运算符充当JS的超级电源