Javascript 如何映射两个对象数据并从其中提取细节?
在我的一个项目中,我需要映射两个对象,如下所示:Javascript 如何映射两个对象数据并从其中提取细节?,javascript,Javascript,在我的一个项目中,我需要映射两个对象,如下所示: const artistData = [ { "_id":"abc123", "name":"John Sams", "age" : 35 }, { "_id":"pqr123", "name":"John Adams", "
const artistData = [
{
"_id":"abc123",
"name":"John Sams",
"age" : 35
},
{
"_id":"pqr123",
"name":"John Adams",
"age" : 45
},
{
"_id":"abc455",
"name":"Patrick",
"age" : 39
},
{
"_id":"xyz345",
"name":"Matt Hardy",
"age" : 43
}
]
const messageData = [
{
"artistId": "xyz345",
"message": "Hello Matt!!!"
}
]
这里我想映射'artistData'的艺术家id和'messageData'的艺术家id,以便从第一个对象数组中提取数据。我使用了以下方法:
artistData.some(artistId => artistId._id === messageData.artistId)
最好的解决方案是什么?要求您满足的确切要求是什么?您是否正在尝试获取属于特定艺术家的所有消息?会有一个不同的答案,这取决于你到底想做什么 例如,如果您从一位艺术家开始,并且希望将所有消息发送给他们,您可以执行以下操作:
messageData.filter(message=>message.artistId===someArtist.\u id)
如果您以一条消息someMessage
开始,并希望将其发送给艺术家,则可以执行以下操作:
artistData.find(artist=>artist.\u id==someMessage.artistId)
编辑
如果要将艺术家的姓名添加到消息中,可以执行以下操作:
const messageWithArtistName={
…一些信息,
名称:artistData.find(artist=>artist.\u id==someMessage.artistId.name}
}
请注意,如果找不到匹配的艺术家,此操作将失败
重新编辑
如果您想这样做,将删除所有消息
messageData.map(message=>{…message,名称:artistData.find(artist=>artist.\u id==message.artistId.name})
一个更好的方法是做相反的事情
让我们首先使用.forEach()
遍历消息,对于每个试图找到艺术家的消息,我们将使用.find()
数组方法
const艺术家=[
{id:“19823908109”,姓名:“约翰·史密斯”,年龄:44},
{id:“0082393109”,姓名:“Jane Doe”,年龄:19},
{id:“30823908109”,姓名:“Mary Air”,年龄:20},
{id:“58239081091”,姓名:“汤姆·西尔弗”,年龄:87},
];
常量消息=[
{id:“58239081091”,留言:“你好,世界”},
{id:“30823908109”,留言:“嗨,汤姆!”
];
//循环浏览每一条信息
messages.forEach({id,message})=>{
//找到艺术家
const-artist=artists.find(artist=>artist.id==id);
//记录艺术家
console.log(艺术家)
});
您需要.find()
而不是.some()
。我认为loopsOK需要两个,但是,如何提取所需的数据呢?const myData=artistData.find(artist=>artist.\u id==someMessage.artistId)
现在myData是一个具有预期数据的对象OK很好,我将尝试此项。有关您正尝试执行的操作的详细信息将非常有用。您是否正在尝试获取消息要发送到的艺术家的姓名并将其添加到对象中?