Javascript 如何使用lodash键将一个数组对象添加到另一个二维数组

Javascript 如何使用lodash键将一个数组对象添加到另一个二维数组,javascript,arrays,lodash,Javascript,Arrays,Lodash,我有一组消息,例如: [{ day: "1", msgs: [{day: "1", id: 1, msg: 'txt'}] },{ day: "2", msgs: [{day: "2", id: 2, msg: 'txt'}] }] 我从服务器接收以下格式的新消息: [ {day: "1", id: 3, msg: 'txt'}, {day: "1", id: 4, msg: 'txt'}, {day: "2", id: 5, msg:

我有一组消息,例如:

[{
    day: "1",
    msgs: [{day: "1", id: 1, msg: 'txt'}]
},{
    day: "2",
    msgs: [{day: "2", id: 2, msg: 'txt'}]
}]
我从服务器接收以下格式的新消息:

[
    {day: "1", id: 3, msg: 'txt'},
    {day: "1", id: 4, msg: 'txt'},
    {day: "2", id: 5, msg: 'txt'},
    {day: "3", id: 6, msg: 'txt'}
]
我需要将新值合并到旧消息数组中。这就是我需要的结果的例子

[{
    day: "1",
    msgs: [{day: "1", id: 1, msg: 'txt'},
       {day: "1", id: 3, msg: 'txt'},
       {day: "1", id: 4, msg: 'txt'}]
},{
    day: "2",
    msgs: [{day: "2", id: 2, msg: 'txt'},
       {day: "2", id: 5, msg: 'txt'}]
},{
    day: "3",
    msgs: [{day: "3", id: 6, msg: 'txt'}]
}]
我花了5小时在堆栈溢出上寻找类似的情况,但我没有找到它。 我已经尝试过使用lodash函数groupBy和forceh,但没有成功。 重要的是,如果新的一天来自服务器,则将该天添加到旧结果中。

只需按照以下步骤操作即可。 Array
.concat
方法将连接两个数组

    var arry1= [{
        day: "1",
        msgs: [{day: "1", id: 1, msg: 'txt'}]
    },{
        day: "2",
        msgs: [{day: "2", id: 2, msg: 'txt'}]
    }];

      var array2= [
        {day: "1", id: 3, msg: 'txt'},
        {day: "1", id: 4, msg: 'txt'},
        {day: "2", id: 5, msg: 'txt'},
        {day: "3", id: 6, msg: 'txt'}
    ];

var fullArray= arry1.cancat(array2);

您可以在纯js中使用
forEach()
find()

var ar1=[{
日期:“1”,
msgs:[{day:“1”,id:1,msg:'txt'}]
},{
第二天:“2”,
msgs:[{day:'2',id:2,msg:'txt'}]
}];
变量ar2=[
{day:“1”,id:3,msg:'txt'},
{day:“1”,id:4,msg:'txt'},
{day:“2”,id:5,msg:'txt'},
{day:“3”,id:6,msg:'txt'}
];
ar2.forEach(函数(o){
变量e=ar1.find((a)=>a.day==o.day);
(e!=未定义)?e.msgs.push(o):ar1.push({day:o.day,msgs[o]});
})

console.log(ar1)
它认为Nenad Vracar解决方案是最好的。如果支持ECMAScript 6

我的解决方案不需要:ECMAScript 6

var oldMessages=[
{
日期:“1”,
msgs:[{day:“1”,id:1,msg:'txt'}]
},
{
第二天:“2”,
msgs:[{day:'2',id:2,msg:'txt'}]
}];
var newMessages=[
{day:“1”,id:3,msg:'txt'},
{day:“1”,id:4,msg:'txt'},
{day:“2”,id:5,msg:'txt'},
{day:“3”,id:6,msg:'txt'}
];
函数合并(旧消息、新消息){

对于(var i=0;i您请求的数据格式有大量冗余信息。恕我直言,我建议您调整代码以使用以下数据格式:

var data=[{day:“1”,id:3,msg:'txt'},
{day:“1”,id:4,msg:'txt'},
{day:“2”,id:5,msg:'txt'},
{day:“3”,id:6,msg:'txt'}
],
dailyMsg=data.reduce((dm,obj)=>dm[obj.day]!==void 0?(dm[obj.day]=dm[obj.day]。concat({id:obj.id,msg:obj.msg}),dm)
:(dm[obj.day]=[{id:obj.id,msg:obj.msg}],dm),{});

console.log(dailyMsg);
您能告诉我们您实际尝试了什么,并告诉我们您每次尝试都遇到了什么问题吗?