Javascript array.find返回的对象的分解结构

Javascript array.find返回的对象的分解结构,javascript,arrays,Javascript,Arrays,我有一个数组消息 [{id:1, userId:'123',test:'hello'},{id:2, userId:'124',test:'world'}] 和另一个数组成员 [{id:'123',firstName:'sam',lastName:'rest', email:'something@a.com'}, {id:'124',firstName:'tim',lastName:'best', email:'abc@a.com'}] 我想回到数组下面 [{messageId:1, us

我有一个数组消息

[{id:1, userId:'123',test:'hello'},{id:2, userId:'124',test:'world'}]
和另一个数组成员

[{id:'123',firstName:'sam',lastName:'rest', email:'something@a.com'},
 {id:'124',firstName:'tim',lastName:'best', email:'abc@a.com'}]
我想回到数组下面

[{messageId:1, userId:'123',test:'hello', fullName:'sam rest', email:'something@a.com'},
 {messageId:2, userId:'124',test:'world', fullName:'sam best', email:'abc@a.com'}]
我尝试在第一个数组上进行映射,然后在第二个数组上进行查找,但我无法确定如何修改结果查找项的键。下面是我要去的地方

return messages.map((message) => ({
   ...message,
   messageId: message.id,
   ...members.find((member) => member.id === message.userId),
}));

您可以对名字、姓氏和test进行分解,然后在映射过程中插入这些分解后的参数,如下所示:

const messages=[{id:1,userId:'123',test:'hello'},{id:2,userId:'124',test:'world'}];
const members=[{id:'123',名字:'sam',姓氏:'rest',电子邮件:'something@a.com'},
{id:'124',名:'tim',姓:'best',电子邮件:'abc@a.com'}];
const merged=messages.map(message=>{
const{firstName,lastName,email,id}=members.find({id}=>id==message.userId);
const fullName=`${firstName}${lastName}`;
返回{
messageId:message.id,
userId:id,
测试:message.test,
全名,
电子邮件
}
});

console.log(合并)您可以对名字、姓氏和test进行分解,然后在映射过程中插入这些分解的参数,如下所示:

const messages=[{id:1,userId:'123',test:'hello'},{id:2,userId:'124',test:'world'}];
const members=[{id:'123',名字:'sam',姓氏:'rest',电子邮件:'something@a.com'},
{id:'124',名:'tim',姓:'best',电子邮件:'abc@a.com'}];
const merged=messages.map(message=>{
const{firstName,lastName,email,id}=members.find({id}=>id==message.userId);
const fullName=`${firstName}${lastName}`;
返回{
messageId:message.id,
userId:id,
测试:message.test,
全名,
电子邮件
}
});

console.log(合并)您只需创建新的属性/键并使用找到的成员中的值即可。为了避免插入未定义的值,可以在添加值之前检查成员是否存在

const messages=[{id:1,userId:'123',test:'hello'},{id:2,userId:'124',test:'world'}];
const members=[{id:'123',名字:'sam',姓氏:'rest',电子邮件:'something@a.com'},
{id:'124',名:'tim',姓:'best',电子邮件:'abc@a.com'}];
让结果=messages.map(message=>{
设obj={
“messageId”:message.id,
“userId”:message.userId,
“测试”:message.test
};
让member=members.find(member=>member.id==message.userId);
国际单项体育联合会(成员){
obj.fullName=member.firstName+“”+member.lastName;
obj.email=member.email;
}
返回obj;
});

控制台日志(结果)您只需创建新的属性/键并使用找到的成员中的值即可。为了避免插入未定义的值,可以在添加值之前检查成员是否存在

const messages=[{id:1,userId:'123',test:'hello'},{id:2,userId:'124',test:'world'}];
const members=[{id:'123',名字:'sam',姓氏:'rest',电子邮件:'something@a.com'},
{id:'124',名:'tim',姓:'best',电子邮件:'abc@a.com'}];
让结果=messages.map(message=>{
设obj={
“messageId”:message.id,
“userId”:message.userId,
“测试”:message.test
};
让member=members.find(member=>member.id==message.userId);
国际单项体育联合会(成员){
obj.fullName=member.firstName+“”+member.lastName;
obj.email=member.email;
}
返回obj;
});

控制台日志(结果)您可以重命名一些值,并使用clsoure来解构一个新属性

var messages=[{id:1,userId:'123',test:'hello'},{id:2,userId:'124',test:'world'}],
members=[{id:'123',名字:'sam',名字:'rest',电子邮件:'something@a.com“},{id:'124',名:'tim',姓:'best',电子邮件:'abc@a.com' }],
结果=messages.map({id:messageId,…message})=>({
messageId,
消息
…({firstName,lastName,email})=>({fullName:`${firstName}${lastName}`,email}))
(members.find((member)=>member.id==message.userId))
}));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以重命名一些值,并使用clsoure来解构获取新属性

var messages=[{id:1,userId:'123',test:'hello'},{id:2,userId:'124',test:'world'}],
members=[{id:'123',名字:'sam',名字:'rest',电子邮件:'something@a.com“},{id:'124',名:'tim',姓:'best',电子邮件:'abc@a.com' }],
结果=messages.map({id:messageId,…message})=>({
messageId,
消息
…({firstName,lastName,email})=>({fullName:`${firstName}${lastName}`,email}))
(members.find((member)=>member.id==message.userId))
}));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
很好地使用了解构,但是如果一个成员不存在,这段代码会抛出一个错误(尽管在OP的场景中不太可能)。很好地使用了解构,但是如果一个成员不存在,这段代码会抛出一个错误(尽管在OP的场景中不太可能)如果你认为任何回答都回答了你的问题,那么你可以考虑把它标记为将来读者的利益。更多信息:谢谢你提醒我“NikhilIf”,你认为任何回答都回答了你的问题,然后考虑把它标记为将来读者的利益。更多信息:。谢谢你提醒我@Nikhil