【问题标题】:Extract specific nested array in JSON Objects that match data with Javascript在 JSON 对象中提取与 Javascript 数据匹配的特定嵌套数组
【发布时间】:2022-01-09 19:27:20
【问题描述】:

我正在使用 NBA API,其中一项功能是按姓氏查找球员。 我遇到的问题;当然,多个玩家可以有相同的姓氏。

使用姓氏排序时来自 API 的响应示例:

   "players": [
    0: {
    "firstName":"Anthony"
    "lastName":"Davis"
    "teamId":"17"
    "yearsPro":"9"
    "collegeName":"Kentucky"
    "country":"USA"
    "playerId":"126"
    "dateOfBirth":"1993-03-11"
    "affiliation":"Kentucky/USA"
    "startNba":"2012"
    "heightInMeters":"2.08"
    "weightInKilograms":"114.8"
    
    1: {
    "firstName":"Deyonta"
    "lastName":"Davis"
    "teamId":"14"
    "yearsPro":"3"
    "collegeName":"Michigan State"
    "country":"USA"
    "playerId":"127"
    "dateOfBirth":"1996-12-02"
    "affiliation":"Michigan State/USA"
    "startNba":"2016"
    "heightInMeters":"2.11"
    "weightInKilograms":"107.5"
}

我在这里限制了结果,但它会一直持续下去,等等。 所以,我想做两件事:

首先,使用他们的名字和姓氏提取/过滤正确的玩家。 在所说的提取中,我仍然需要匹配时的完整的数组信息

所以本质上,我想要“Deyonta Davis”,但是当找到时 - 我还需要该球员的其他信息(职业生涯、大学、国家等)

我已经设置了一个命令,用于通过姓氏检索此 API 中嵌套数据的第一个结果 - 该命令采用您输入的姓氏并发送第一个结果。确切的问题是,第一个结果可能不是您要找的人。

目标是包含名字和姓氏以避免拉错玩家。

我目前如何通过姓氏调用信息的方式:

// Calling API
    const splitmsg = message.content.split(' ')
    var lastnameurl = "https://api-nba-v1.p.rapidapi.com/players/lastName/" + splitmsg[1];
    axios.get(lastnameurl, {
      headers: {
      "x-rapidapi-key": apikey,
      "x-rapidapi-host": apihost
    }

// Extracting Player Information (first result)
var playerfirstname = response.data.api.players[0].firstName;
var playerlastname = response.data.api.players[0].lastName;
var collegename = response.data.api.players[0].collegeName;
var countryname = response.data.api.players[0].country;
var playerDOB = response.data.api.players[0].dateOfBirth;
var yrspro = response.data.api.players[0].yearsPro;
var startednba = response.data.api.players[0].startNba;

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • OP 可能会考虑assigning the data in a more convenient way ... const { firstName: playerFirstName, lastName: playerLastName, collegeName, country: countryName, dateOfBirth: playerDOB, yearsPro, startNba } = response.data.api.players[0];

标签: javascript arrays json api filter


【解决方案1】:

如果我正确理解了这个问题,那么任务是:

从属性firstNamelastName 等于所需值的数组中检索第一个匹配对象。

要实现这一点,您可以使用 find 函数中的构建。

const player = array.find(el => {
  return el.firstName === "Deyonta" && el.lastName === "Davis"
});

请记住,如果数组中没有这样的对象,player 将是 undefined

【讨论】:

  • 非常感谢!感谢您的快速响应。
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 2013-12-31
  • 2020-06-09
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多