Javascript 基于相同的键和值合并两个对象数组

Javascript 基于相同的键和值合并两个对象数组,javascript,arrays,json,react-native,Javascript,Arrays,Json,React Native,我有一个如下所示的数组: [ { like_id: 1, likes: 1, post_id: 1, type: "feed_post_likes", _id: "b51771798ed01795cb8a17b028000329" }, { post_id: 1, created_date: "2021-03

我有一个如下所示的数组:

[
    {
        like_id: 1, 
        likes: 1,
        post_id: 1,
        type: "feed_post_likes",
        _id: "b51771798ed01795cb8a17b028000329"
    }, 
    {
        post_id: 1,
        created_date: "2021-03-10T10:54:35.264Z",
        post_message: "Happy",
        post_pic: "",
        post_type: "post"
    }
]
我需要根据post_id合并这些数组,并得到以下结果:

[
    {
        like_id: 1,
        likes: 1,
        post_id: 1,
        type: "feed_post_likes",
        _id: "b51771798ed01795cb8a17b028000329",
        created_date: "2021-03-10T10:54:35.264Z",
        post_message: "Happy",
        post_pic: "",
        post_type: "post"
    }
]

您可以使用array reduce方法执行以下操作

arr=[
{
比如:1,
喜欢:1,,
邮政编码:1,
类型:“feed\u post\u likes”,
_id:“b51771798ed01795cb8a17b028000329”
}, 
{
邮政编码:1,
创建日期:“2021-03-10T10:54:35.264Z”,
发布消息:“快乐”,
邮政图片:“,
职位类型:“职位”
}
];
ret=arr.reduce((上一个,当前)=>{
const idx=prev.findIndex(item=>item.post\u id==curr.post\u id);
如果(idx>-1){
prev[idx]={…prev[idx],…curr};
}否则{
上推(当前);
}
返回上一个;
}, [])

控制台日志(ret)您可以使用array reduce方法执行以下操作

arr=[
{
比如:1,
喜欢:1,,
邮政编码:1,
类型:“feed\u post\u likes”,
_id:“b51771798ed01795cb8a17b028000329”
}, 
{
邮政编码:1,
创建日期:“2021-03-10T10:54:35.264Z”,
发布消息:“快乐”,
邮政图片:“,
职位类型:“职位”
}
];
ret=arr.reduce((上一个,当前)=>{
const idx=prev.findIndex(item=>item.post\u id==curr.post\u id);
如果(idx>-1){
prev[idx]={…prev[idx],…curr};
}否则{
上推(当前);
}
返回上一个;
}, [])

控制台日志(ret)我提出了一个解决方案:

const arrayTest=[
{like_id:1,likes:1,post_id:1,键入:“feed_post_likes”,_id:“b51771798ed01795cb8a17b028000329”},
{post_id:1,创建日期:“2021-03-10T10:54:35.264Z”,post_消息:“快乐”,post_图片:,post_类型:“post”}
]
常数结果=阵列测试减少((acc,curr)=>{
const hasIdAlready=acc.some(e=>e.post\u id===curr.post\u id);
如果(hasIdAlready){
返回acc
}
常量foundMatchingElems=arrayTest.filter(e=>e.post\u id===curr.post\u id)
const mergedObjects=foundMatchingElems.reduce((obj,e)=>({…obj,…e}),{})
返回[…acc,合并对象]
}, [])

console.log(result)
我提出了一个解决方案:

const arrayTest=[
{like_id:1,likes:1,post_id:1,键入:“feed_post_likes”,_id:“b51771798ed01795cb8a17b028000329”},
{post_id:1,创建日期:“2021-03-10T10:54:35.264Z”,post_消息:“快乐”,post_图片:,post_类型:“post”}
]
常数结果=阵列测试减少((acc,curr)=>{
const hasIdAlready=acc.some(e=>e.post\u id===curr.post\u id);
如果(hasIdAlready){
返回acc
}
常量foundMatchingElems=arrayTest.filter(e=>e.post\u id===curr.post\u id)
const mergedObjects=foundMatchingElems.reduce((obj,e)=>({…obj,…e}),{})
返回[…acc,合并对象]
}, [])
console.log(result)
您可以使用来合并具有相同
post\u id的对象,然后使用来获取合并对象的数组

const项=[
{like_id:1,likes:1,post_id:1,键入:'feed_post_likes','b51771798ed01795cb8a17b028000329'},
{post_id:1,created_date:'2021-03-10T10:54:35.264Z',post_message:'Happy',post_pic:'',post_type:'post'}
]
常量结果=项目。减少((acc,项目)=>({
…acc,
[项目.发布id]:{
…acc[项目编号],
…项目
}
}), {})
console.log(Object.values(result))
您可以使用来合并具有相同post\u id的对象,然后使用来获取合并对象的数组

const项=[
{like_id:1,likes:1,post_id:1,键入:'feed_post_likes','b51771798ed01795cb8a17b028000329'},
{post_id:1,created_date:'2021-03-10T10:54:35.264Z',post_message:'Happy',post_pic:'',post_type:'post'}
]
常量结果=项目。减少((acc,项目)=>({
…acc,
[项目.发布id]:{
…acc[项目编号],
…项目
}
}), {})

console.log(Object.values(result))
您可以迭代存储每个已处理的
post\u id
的对象数组,对于尚未处理的对象,可以使用
array.filter()
返回具有给定
post\u id
的对象数组,然后使用
array.reduce()
使用
Object.assign()将所有对象合并为一个对象:

var-arr=[
{
比如:1,
喜欢:1,,
邮政编码:1,
类型:“feed\u post\u likes”,
_id:“b51771798ed01795cb8a17b028000329”
}, 
{
邮政编码:1,
创建日期:“2021-03-10T10:54:35.264Z”,
发布消息:“快乐”,
邮政图片:“,
职位类型:“职位”
}
];
让处理=[];
让结果=[];
用于(arr中的obj){
if(processed.indexOf(arr[obj].post_id)<0){
push(arr[obj].post_id);
结果.push(arr.filter(item=>item.post\u id==arr[obj].post\u id)
.reduce((acc,currVal)=>Object.assign(acc,currVal),{});
}
}

控制台日志(结果)
您可以遍历存储每个已处理的
post\u id
的对象数组,对于尚未处理的对象,可以使用
array.filter()
返回具有给定
post\u id
的对象数组,然后使用
array.reduce()
使用
Object.assign()将所有对象合并为一个对象:

var-arr=[
{
比如:1,
喜欢:1,,
邮政编码:1,
类型:“feed\u post\u likes”,
_id:“b51771798ed01795cb8a17b028000329”
}, 
{
邮政编码:1,
创建日期:“2021-03-10T10:54:35.264Z”,
发布消息:“快乐”,
邮政图片:“,
职位类型:“职位”
}
];
让处理=[];
让结果=[];
用于(arr中的obj){
if(processed.indexOf(arr[obj].post_id)<0){
push(arr[obj].post_id);
结果.push(arr.filter(item=>item.post\u id==arr[obj].post\u id)
.reduce((acc,currVal)=>Object.assign(acc,currVal),