Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.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 比较2个对象数组,并使用Ramda.js获取详细信息_Javascript_Ramda.js - Fatal编程技术网

Javascript 比较2个对象数组,并使用Ramda.js获取详细信息

Javascript 比较2个对象数组,并使用Ramda.js获取详细信息,javascript,ramda.js,Javascript,Ramda.js,我有两个对象数组 如何比较这两个对象数组并获得具有相同id的用户的详细信息 users:[{ id:"1", displayName: "test" email: "abc@gmail.com" }, { id:"2", displayName: "test2" email: "abc@gmail.com" }] listingAgents:[{ userId:

我有两个对象数组

如何比较这两个对象数组并获得具有相同id的用户的详细信息

users:[{
 id:"1",
 displayName: "test"
 email: "abc@gmail.com"
},
{
 id:"2",
 displayName: "test2"
 email: "abc@gmail.com"
}]

listingAgents:[{
 userId:"1",
 listingId:"1354"
]}

两个数组具有相同id的相同对象?如果是:

users2_id = users2.map(u => u.id)
common_users = users1.filter(u => users2_id.includes(u.id))
如果不是

common_users = users1.filter(u => {
    user_2 = users2.find(u_2 => u_2.id === u.id)
    if (!user_2) {
        return false;
    // do your stuff with the two different objects with same id like
    return {...u, ...user_2}
});
但要注意复杂性

编辑:

实际上,对于第二部分,您可以先过滤其中一个阵列,然后再使用它,您将删除许多无用的对象,并根据阵列的大小减少操作数! 比如:

const用户=[{
id:“1”,
显示名称:“测试”,
电子邮件:“abc@gmail.com"
},
{
id:“2”,
displayName:“test2”,
电子邮件:“abc@gmail.com"
}
]
常量列表代理=[{
用户标识:“1”,
列表ID:“1354”
}]
让results=users.filter((user)=>listingAgents.find((x)=>x.userId==user.id));

console.log(结果)
所需的输出格式不清楚。我假设您希望将匹配的用户合并到每个列表中。这样的输入:

const用户=[
{id:“1”,显示名称:“测试”,电子邮件:abc@gmail.com"},
{id:“2”,显示名称:“test2”,电子邮件:abc@gmail.com"}
]
常量列表代理=[
{userId:“1”,listingId:“1354”},
{userId:“不匹配”,listingId:“2465”}
]
getListings(用户)(listingAgents)
应返回以下内容:

[
{
“用户ID”:“1”,
“listingId”:“1354”,
“id”:“1”,
“显示名称”:“测试”,
“电子邮件”:abc@gmail.com",
},
{
“userId”:“不匹配”,
“listingId”:“2465”,
}
]
因为这是用Ramda标记的,首先请注意,我们当然可以用Ramda来做这件事。这里有一个解决方案:

const{pipe,indexBy,prop,flip,propo,o,chain,merge,map}=R
const getListings=管道(
indexBy(prop('id')),
flip(propOr({})),
翻转(o)(prop('userId')),
链(合并),
地图
)
const users=[{id:“1”,displayName:“test”,email:“abc@gmail.com},{id:“2”,显示名:“test2”,电子邮件:abc@gmail.com"}]
const listingAgents=[{userId:“1”,listingId:“1354”},{userId:“不匹配”,listingId:“2465”}]
log(getListings(users)(listingAgents))

你自己都试过什么?StackOverflow基于帮助您解决编码问题的想法,而不是为您编写代码。const test=R.find(R.propEq('id',“如何在此处获取listingAgents userID”))(users)@ScottSauyet
users1_id = users1.map(u => u.id)
users2_filtered = users2.filter(u => users1_id.includes(u.id)