从负载中删除密钥

Remove key from payload

我想从以下响应中删除密钥 team_id:

{
  "id": 14,
  "name": "Angel Stadium of Anaheim",
  "opened": "1966-04-19T00:00:00.000Z",
  "capacity": 45517,
  "location": "Anaheim, California",
  "team_id": "95cbbe2a",
  "team": {
    "id": "95cbbe2a",
    "name": "Los Angeles Angels",
    "established_in": 1961,
    "league": "American League",
    "division": "West Division",
    "logo": "https://upload.wikimedia.org/wikipedia/commons/7/79/Los_Angeles_Angels_of_Anaheim_Insignia.svg",
    "number_of_titles":1
  }
}

我现在使用的代码从场地获取所有数据,起初我需要所有这些数据但在最后的响应中我想省略 team_id 键:

    const venues = await connection(VENUE_TABLE)
      .limit(LIMIT_PER_PAGE)
      .offset((page - 1) * LIMIT_PER_PAGE)
      .select('*')
      .orderBy('name');

    const venuesWithTeam = await venues.reduce(
      (promise, element) =>
        promise.then(async (result) =>
          result.concat({
            ...element,
            team: await connection('team')
              .where('id', element.team_id)
              .select('*')
              .first(),
          })
        ),
      Promise.resolve([])
    );

期望的行为是:

{
  "id": 14,
  "name": "Angel Stadium of Anaheim",
  "opened": "1966-04-19T00:00:00.000Z",
  "capacity": 45517,
  "location": "Anaheim, California",
  "team": {
    "id": "95cbbe2a",
    "name": "Los Angeles Angels",
    "established_in": 1961,
    "league": "American League",
    "division": "West Division",
    "logo": "https://upload.wikimedia.org/wikipedia/commons/7/79/Los_Angeles_Angels_of_Anaheim_Insignia.svg",
    "number_of_titles":1
  }
}

我该怎么做才能做到这一点?

使用Object.assign从现有对象创建一个新对象,然后使用delete删除键

let data = {
  "id": 14,
  "name": "Angel Stadium of Anaheim",
  "opened": "1966-04-19T00:00:00.000Z",
  "capacity": 45517,
  "location": "Anaheim, California",
  "team_id": "95cbbe2a",
  "team": {
    "id": "95cbbe2a",
    "name": "Los Angeles Angels",
    "established_in": 1961,
    "league": "American League",
    "division": "West Division",
    "logo": "https://upload.wikimedia.org/wikipedia/commons/7/79/Los_Angeles_Angels_of_Anaheim_Insignia.svg",
    "number_of_titles": 1
  }
}

let newData = Object.assign({}, data);
delete newData.team_id;
console.log(newData)

您可以从对象

中删除 属性
delete obj.team_id

我们一直在使用 lodash / underscore 来做这件事,所以它是

return _.omit(obj, 'team_id')

这样就可以在不修改原件的情况下得到想要的结果。

您可以使用 object destructuring 从对象中删除特定键

const venueWithTeamId = {
  "id": 14,
  "name": "Angel Stadium of Anaheim",
  "opened": "1966-04-19T00:00:00.000Z",
  "capacity": 45517,
  "location": "Anaheim, California",
  "team_id": "95cbbe2a",
  "team": {
    "id": "95cbbe2a",
    "name": "Los Angeles Angels",
    "established_in": 1961,
    "league": "American League",
    "division": "West Division",
    "logo": "https://upload.wikimedia.org/wikipedia/commons/7/79/Los_Angeles_Angels_of_Anaheim_Insignia.svg",
    "number_of_titles":1
  }
};

const { team_id, ...withoutTeamId } = venueWithTeamId;
console.log(withoutTeamId);