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);
您能告诉我们您实际尝试了什么,并告诉我们您每次尝试都遇到了什么问题吗?