我正在向网站请求游戏;如果你们中的任何人都熟悉它,那么这场比赛就是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)
}
}
})
如果我需要更深入地解释我的问题,请告诉我。
答案 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
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;