在 vue.js 中加入 2 个具有相同字段名称的对象

join 2 objects with the same field name in vue.js

我正在尝试通过键连接 2 个对象,这些对象中有 2 个同名但值不同的字段。

var players = [{ id : 'a', name : "player1",team:1},{ id : 'b', name : "player2",team:1}, { id : 'c', name : "player3",team:2}]
var teams = [{ id : 1, name : "LA"}, {id : 2, name: "IL"}]

我希望能够以这样的方式结束:

var mergedList = [{ id : 'a', name : "player1",team.id:1, team.name: "LA"},
          { id : 'b', name : "player2",team__id:1, team_name: "LA"},
          { id : 'c', name : "player3",team__id:2, team_name: "US"}]

这是我到目前为止尝试过的方法:

const mergedList = players.map((player) => ({
        ...player,
        ...teams.find((team) => team__id === player_team),
      }));

但是球员的姓名字段被球队的姓名字段所取代。

您需要为 teams 中的字段设置新的 属性 键。请记住,密钥不允许包含 .

const mergedList = players.map((player) => {
    const team = teams.find((team) => team.id === player.team);
    return {
        ...player,
        team_id: team?.id,
        team_name: team?.name,
    }
});

名称正在被替换,因为 PlayerTeam 对象都有 name 属性 并且解决方案在组合对象时覆盖 name .

由于您想分别使用 team.idteam.name 访问 team 对象的 idname,一个合适的解决方案是让团队播放器对象中的对象,例如:

var players = [{ id : 'a', name : "player1",team:1},{ id : 'b', name : "player2",team:1}, { id : 'c', name : "player3",team:2}]

var teams = [{ id : 1, name : "LA"}, {id : 2, name: "IL"}]

const mergedList = players.map((player) => ({
  ...player,
  team: teams.find((team) => team.id === player.team),
}));

mergedList.forEach(ele => {
 console.log(`${ele.id}, ${ele.name} is in team ${ele.team.id}, ${ele.team.name}`);
});