2017-12-15 3 views
0

원시 원시 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

arr라고 가정이 'Week1Table가 [I]가 = [차전 [0] .standing [I] .teamName, 차전 [0] .standing [I] .position] '결국 당신이 원하는 것은 무엇입니까? 매 MatchDay마다? –

+0

글쎄, 일종의. 예를 들어 Week1Table [0] = [ "맨체스터 유나이티드 FC", 1, 2, 3, 4, 5 ...]처럼 보이기를 원합니다. 숫자는 각 팀의 리그 위치입니다. 연속 주. 문제는 원래 JSON에서 각각의 matchday 객체가 팀의 모든 위치를 주간에서 주간으로 이동한다는 것을 의미합니다. –

+0

왜 데이터를 변형해야하는지 조금 궁금합니다. 그것이 제공되고있는 방식은 작업하기가 더 쉬울 것 같습니다. 특히 d3을 사용하여 무언가를 만드는 경우에 ... – Mark

답변

0

첫 번째 요소의 순위 배열에서 팀 목록을 가져옵니다. 세트에있는 매치 데이마다 팀 이름과 위치에서 각 팀의 배열을 만듭니다. 다음 경기시 팀을 찾지 못하면 그 날의 팀 순위는 -1이됩니다.

초기 배열 그래서

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; 
    })); 
});