如果一个值相同,则显示另一个键的值

时间:2017-01-07 23:13:08

标签: javascript node.js

我正在向网站请求游戏;如果你们中的任何人都熟悉它,那么这场比赛就是Legens联盟,但这并不重要。

我想提取一些数据来获得冠军的名字,事实是Riot(API的提供者)给出一个端点来获得每个冠军和ID的一些点,所以我必须做一个请求到另一个网站获取冠军的名称,但因为第二个网站没有我正在寻找的数据(这些是积分)。我无法使用这些数据。

无论如何,我面临的问题是我已经拥有了人员个人资料中显示的冠军头衔,这是3个。第二个请求我要比较所有冠军的身份,如果它发现所需的3个冠军的相同ID,它只显示那3个冠军的名字。我使用request包在Node上执行此操作;这就是我所拥有的,每当我发出请求时它只显示一个名字:最后一个。

request.get(`https://lan.api.pvp.net/championmastery/location/LA1/player/24244/topchampions?api_key=${API}`, (error, response, body) => {
  let parsedInfo = JSON.parse(body)

  var data = {
    "id": [],
    "points": []
  }

  for(x in parsedInfo) {
    data.id.push(parsedInfo[x].championId)
    data.points.push(parsedInfo[x].championPoints)

    var checkChampId = parsedInfo[x].championId
  }

  request.get('http://ddragon.leagueoflegends.com/cdn/6.24.1/data/en_US/champion.json', (error, response, body) => {
    let champParse = JSON.parse(body)

    for(x in champParse.data) {
      if(checkChampId == champParse.data[x].key) {
        console.log(champParse.data[x].name)
      }
    }
  })

如果我需要更深入地解释我的问题,请告诉我。

3 个答案:

答案 0 :(得分:0)

在第一个for循环中创建一个数组并追加你的parsedInfo

for(var x = 0; x < in parsedInfo.length; x ++) {
    data.id.push(parsedInfo[x].championId)
    data.points.push(parsedInfo[x].championPoints)

    var checkChampId = []

    checkChampId.push(parsedInfo[x].championId)

也可以在第二个循环中尝试这个

for(var x = 0; x <  champParse.data; x ++)

答案 1 :(得分:0)

您只保存最后一个冠军的身份

var checkChampId = parsedInfo[x].championId

首先,您需要保存所有ID,您可以创建一个数组来存储它

var champIds = [];
for(x in parsedInfo) {
  data.id.push(parsedInfo[x].championId)
  data.points.push(parsedInfo[x].championPoints)

  // saves the id in the array
  champIds.push(parsedInfo[x].championId);
}

现在有了所有ID,如果数组中存在键,则可以检查另一个循环:

for(x in champParse.data) {
  // check if the key is in the array of ids you saved
  if (champIds.indexOf(Number(champParse.data[x].key)) !== -1) {
    console.log(champParse.data[x].name)
  }
}

如果类型不同,您可以使用其他方法进行搜索

champIds.filter(function (id) { return id == champParse.data[x].key; }).length > 0

这将在不考虑对象类型的情况下进行比较,如果找到任何匹配的对象,则为真。

答案 2 :(得分:0)

您的问题是您要分配变量

var checkChampId = parsedInfo[x].championId位于第一个for loop的封装范围内,导致在每个循环后删除它。

全局定义checkChampId并将其用作ids的数组,而不是单个值。或者将您的请求代码移动到与checkChampId var

的定义相同的范围内

&#13;
&#13;
for (x in parsedInfo) {
  data.id.push(parsedInfo[x].championId)
  data.points.push(parsedInfo[x].championPoints)

  var checkChampId = parsedInfo[x].championId

  /* removed the }  here */

  request.get('http://ddragon.leagueoflegends.com/cdn/6.24.1/data/en_US/champion.json', (error, response, body) => {
        let champParse = JSON.parse(body)

        for (x in champParse.data) {
          if (checkChampId == champParse.data[x].key) {
            console.log(champParse.data[x].name)
          }
        }

      } /* add the } here */
&#13;
&#13;
&#13;