我有一个原始的JSON文件,看起来像this。在其中,它包含18个对象,每个对象包含有关特定英超联赛足球周的信息。在这18个匹配周信息对象的每一个中,它包含20个关于团队的对象,包括他们的位置,目标等。它的外观如下:nested structure of my JSON.
我想要的相关信息是团队及其在那一周的相关位置。如此有效,我想每周18张联赛表的快照。但是,格式我需要的信息看起来像this。也就是说,它需要是一个数组数组,其中每个数组都包含团队的名称,然后用逗号分隔一周一周的联盟位置。在图片中,只有第一周的联赛位置,但我需要每个星期的位置,因此数组中的每个数组对象应该是17个项目。
我已经尝试了很长时间从第一种形式到第二种形式(即从嵌套的JSON到数组数组)获取信息,但我似乎无法操纵数据以正确的方式。我已经尝试过排序函数和嵌套循环,但我似乎无法做到。
这是我的代码当前的样子(使用d3.js库来加载请求)。
<script>
var count = 21
var requests = new Array()
//This generates an array of get requests
for (i=1; i<count; i++) {
requests[i] = d3.request("http://api.football-data.org/v1/competitions/445/leagueTable/?matchday=" + i)
.header("X-Auth-Token", "")
}
var q = d3.queue();
//This uses the d3 queue function to make 16 get requests for the data, and
//then once all the data is retrieved (awaitAll), it excutes the callback function
for (i=1; i<count; i++) {
q.defer(requests[i].get);
}
q.awaitAll(function(error, files) {
if (error) throw error;
//This converts the retrieved files to a JSON
var Matchdays = new Array()
for(i=0; i<count-1; i++) {
Matchdays[i] = files[i].response
Matchdays[i] = JSON.parse(Matchdays[i])
}
console.log(Matchdays)
//This makes a table in the required format for Week 1. I need all the other Weeks
// to follow the numbers that are already there, however.
var Week1Table = new Array()
for(i=0; i<count-1; i++) {
Week1Table[i]= [Matchdays[0].standing[i].teamName, Matchdays[0].standing[i].position]
}
console.log(Week1Table)
})
</script>
答案 0 :(得分:0)
从第一个元素的排名数组中获取您的团队列表。从团队名称中为每个团队构建一个数组,并从该集合中的每个匹配日开始为其定位。如果在下一个比赛日未找到球队,则该日的位置将为-1。
假设您的初始数组被称为arr
var out = arr[0].standing.map(function (s) {
return [s.teamName].concat(arr.map(function (el) {
var team = el.standing.find(function (s1) {
return s1.teamName == s.teamName;
});
if (!team) return -1;
return team.position;
}));
});