Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于一个键合并多个对象数组_Javascript_Node.js_Arrays_Json_Object - Fatal编程技术网

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的超级电源