【问题标题】:What would be a good way of looping through an API?什么是循环通过 API 的好方法?
【发布时间】:2017-02-28 05:10:26
【问题描述】:

我正在尝试找出一种循环遍历数组的好方法,但到目前为止,我只能弄清楚如何一次遍历一个数组。我假设我需要做一个 forEach 声明,但不完全确定如何措辞所说的声明。你们中有人碰巧知道这样做的好方法吗?

以下是我的 node.js 应用程序文件,其中 API 密钥已删除

request("https://api.sportradar.us/ncaamb-t3/games/" + yyyy + "/" + mm + "/" + dd + "/schedule.json?api_key=", function(error, response, body){
    if(!error && response.statusCode == 200){
        var data = JSON.parse(body);
    T.post('statuses/update', { status: (data["games"][6]["home"]["name"]) + " Vs " + (data["games"][6]["away"]["name"]) }, function(err, data, response) {
  console.log(data);
});
       }
  }); 

这是我尝试循环的数组示例:

游戏:

  [ { id: 'f46c9795-a8f1-4ca3-8960-3788fb6a37c5',
       status: 'scheduled',
       coverage: 'extended_boxscore',
       scheduled: '2017-02-28T00:00:00+00:00',
       conference_game: true,
       venue: [Object],
       broadcast: [Object],
       home: [Object],
       away: [Object] },
     { id: '0e93d1d1-2d57-4524-b95f-d9d1b133b95f',
       status: 'scheduled',
       coverage: 'full',
       scheduled: '2017-02-28T00:00:00+00:00',
       conference_game: true,
       venue: [Object],
       broadcast: [Object],
       home: [Object],
       away: [Object] },
     { id: '7eb44074-4656-489a-976d-abfcbd669a7c',
       status: 'scheduled',
       coverage: 'extended_boxscore',
       scheduled: '2017-02-28T00:00:00+00:00',
       conference_game: true,
       venue: [Object],
       home: [Object],
       away: [Object] },
     { id: '76fed39a-f931-4243-885d-86b14da93e4a',
       title: 'Atlantic Sun - Quarterfinal 3',
       status: 'scheduled',
       coverage: 'full',
       scheduled: '2017-02-28T00:00:00+00:00',
       conference_game: false,
       venue: [Object],
       broadcast: [Object],
       home: [Object],
       away: [Object] },

如您所见,我为主队和客队输入了一个数字 [6],因为这是它似乎对我有用的唯一方法,否则它会给我一个错误,因为如果我只是写它是一个对象像这样 (data["games"]["home"]["name"]) 有什么建议吗?

【问题讨论】:

  • 也许你应该展示主场和客场的情况。
  • @baao 这只是球队的名字
  • 不,它不是,它是一个对象
  • @baao 好的,那我如何让它显示它是什么,这就是你的意思吗?
  • 嗯,是的,但我也很难理解你想对数据做什么。

标签: javascript arrays node.js api


【解决方案1】:

因此,对于您的 cmets,只需循环比赛并展示客队对阵主队,以下方法将起作用:

data.games.forEach(v => {
    console.log("home team: " + v.home.name, "away team: " + v.away.name);
});

当然,您可以使用相同的循环将多个状态更新发布到 twitter...

我不知道 twitter API,也不知道是否有可能在一次调用中发布多个更新,但你可以使用它来简单地发布多次:

data.games.forEach(v => {
    T.post('statuses/update', { status: v.home.name + " VS " + v.away.name }, 
        function(err, data, response) {
            // ... handle the response as you like
        }
});

data.games.forEach((v,i) => {
    setTimeout(() => {
        T.post('statuses/update', { status: v.home.name + " VS " + v.away.name },
            function(err, data, response) {
                // ... handle the response as you like
            });
    }, i * 20000);
});

【讨论】:

  • 非常感谢,这很有效,你能解释一下这个片段以及我做错了什么吗?或者也许发布一个很好的资源让我看看以提供帮助?如果不是那也很酷,谢谢你的帮助!
  • 嗯,它基本上只是一个 forEach 循环,您可以阅读更多关于它的信息here。循环中的v 是对象——home、away(和home.name)等等都是对象的属性。作为响应,您得到的是一组对象,当您在谷歌上搜索对象数组时,您可以找到很多关于此的信息 - 在 SO 上也有一些关于此的问答。 @Branduo
  • P.S.您可以通过索引访问某个数组元素(这就是您对 data.games[6] 所做的 - 或者您可以像我在答案@Branduo 中所做的那样遍历整个数组
  • 感谢您的帮助,我是自学成才的,所以反复试验似乎是我最好的朋友,但有时我会卡住,然后像您这样的好人可以比文档更容易地向我解释事情。再次感谢。
  • 还有一件事,我刚刚运行了一个 setInterval 函数,并一次在推特上发布了我的所有数据 LOL 我将如何循环遍历每个对象,但不是一次全部循环一次,也许每 20 秒一次?然后我需要在它遍历所有这些之后结束它。
猜你喜欢
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 2019-04-14
  • 2010-10-14
  • 2019-08-08
  • 1970-01-01
相关资源
最近更新 更多