2017-10-18 1 views
0

:날짜별로 배열의 항목을 그룹화하려면 어떻게합니까? 객체의 다음과 같은 배열을 지정해,

[ 
{ 
"notes": "Game was played", 
"time": "2017-10-04T20:24:30+00:00", 
"sport": "hockey", 
"owner": "steve", 
"players": "10", 
"game_id": 1, 
}, 
{ 
"notes": "Game was played", 
"time": "2017-10-04T12:35:30+00:00", 
"sport": "lacrosse", 
"owner": "steve", 
"players": "6", 
"game_id": 2, 
}, 
{ 
"notes": "Game was played", 
"time": "2017-10-14T20:32:30+00:00", 
"sport": "hockey", 
"owner": "steve", 
"players": "4", 
"game_id": 3, 
}, 
{ 
"notes": "Game was played", 
"time": "2017-10-04T10:12:30+00:00", 
"sport": "hockey", 
"owner": "henry", 
"players": "10", 
"game_id": 4, 
}, 
{ 
"notes": "Game was played", 
"time": "2017-10-14T20:34:30+00:00", 
"sport": "soccer", 
"owner": "john", 
"players": "12", 
"game_id": 5, 
} 
] 

나는 새로운 배열을 만들려고하고, (키로) 각 날짜 개체를 만들 것이며, 어떤 게임은 게임 아래에 나열된 날짜에 경기 (다른 키)를 동일한 객체에 저장합니다.

let t = this.state.data; (data above) 
     let list = []; 
     for (let i = 0; i < t.length; i++) { 
      let dates = t[i].time.slice(0,10); 

      if (!list[dates]) { 
       list[dates] = []; 
      } 
      list[dates].push(t[i]); 
     } 

내 버전은 다음 이들의 내부의 값으로 날짜와 배열을 반환하고, :

여기
[ 
{ 
date:'date string', 
games:[array of games played on the date] 
}, 
{ 
date: 'other date', 
games:[games under the other date] 
} 
]... 

내가 무엇을했는지 있습니다 : 같은

새로운 배열이 보일 것입니다 게임이 나열되어 있지만 다른 키와 같은 개체에 나열하려고합니다.

도움이나 도움을 주시면 감사하겠습니다.

+1

? 해결책은 여기에서 아주 간단합니다. –

+0

안녕하세요, Spencer, 코멘트에 코드를 게시하는 방법을 모르겠지만 빈 배열을 만들고 for 루프를 실행하여 첫 번째 정보를 반복했습니다. 나는 원래 날짜를 (yyyy-mm-dd) 형식으로 가져온 다음 현재 빈 배열에 해당 날짜가 있는지 확인하기 위해 다른 for 루프를 만들었습니다. 그렇지 않으면 새 키를 만들 것입니다. 날짜를 입력 한 다음 게임을 게임 키로 전달하십시오. 처음에는 충격이 있었고 기억이 망가졌고 이전의 물건을 덮어 썼습니다. – Blake

+0

코드를 주석에 게시하지 않고 질문에 대한 편집으로 추가하십시오. –

답변

2

여기에 reduce을 사용하는 해결책이 있습니다. time을 날짜 문자열로 분할 한 다음 각 날짜의 키를 설정하십시오. 키가 배열에 밀어 존재하는 경우 :

업데이트은 배열 형식 버전

const data = [ 
 
    {notes: 'Game was played', time: '2017-10-04T20:24:30+00:00', sport: 'hockey', owner: 'steve', players: '10', game_id: 1}, 
 
    { notes: 'Game was played', time: '2017-10-04T12:35:30+00:00', sport: 'lacrosse', owner: 'steve', players: '6', game_id: 2 }, 
 
    { notes: 'Game was played', time: '2017-10-14T20:32:30+00:00', sport: 'hockey', owner: 'steve', players: '4', game_id: 3 }, 
 
    { notes: 'Game was played', time: '2017-10-04T10:12:30+00:00', sport: 'hockey', owner: 'henry', players: '10', game_id: 4 }, 
 
    { notes: 'Game was played', time: '2017-10-14T20:34:30+00:00', sport: 'soccer', owner: 'john', players: '12', game_id: 5 } 
 
]; 
 

 
// this gives an object with dates as keys 
 
const groups = data.reduce((groups, game) => { 
 
    const date = game.time.split('T')[0]; 
 
    if (!groups[date]) { 
 
    groups[date] = []; 
 
    } 
 
    groups[date].push(game); 
 
    return groups; 
 
}, {}); 
 

 
// Edit: to add it in the array format instead 
 
const groupArrays = Object.keys(groups).map((date) => { 
 
    return { 
 
    date, 
 
    games: groups[date] 
 
    }; 
 
}); 
 

 
console.log(groupArrays);

+0

안녕하세요 오스틴, 답변 해 주셔서 감사합니다. 나는 for 루프를 사용하여 비슷한 대답을 얻을 수 있었지만, 필요한 것은 날짜가 자체 키가되고 게임이 배열에 다른 키의 값으로 나열되는 것입니다 (모두 같은 객체 내에 있음) . 그래서 {날짜 : '날짜', 게임 : [...]} – Blake

+0

@Blake는 그것을 얻었고 다른 포맷을 보았습니다. 방금 추가 한 업데이트가 당신이 찾고있는 것을 제공한다고 생각합니다. –

+0

오스틴 도움에 감사드립니다.이 문제는 하루 종일 두통을 안겨 줬습니다! – Blake

0

이 당신이 찾고있는 무엇인가를 추가 ??? 지금까지 시도 무엇

var data = [ 
 
    { 
 
     notes: 'Game was played', 
 
     time: '2017-10-04T20:24:30+00:00', 
 
     sport: 'hockey', 
 
     owner: 'steve', 
 
     players: '10', 
 
     game_id: 1 
 
    }, 
 
    { 
 
     notes: 'Game was played', 
 
     time: '2017-10-04T12:35:30+00:00', 
 
     sport: 'lacrosse', 
 
     owner: 'steve', 
 
     players: '6', 
 
     game_id: 2 
 
    }, 
 
    { 
 
     notes: 'Game was played', 
 
     time: '2017-10-14T20:32:30+00:00', 
 
     sport: 'hockey', 
 
     owner: 'steve', 
 
     players: '4', 
 
     game_id: 3 
 
    }, 
 
    { 
 
     notes: 'Game was played', 
 
     time: '2017-10-04T10:12:30+00:00', 
 
     sport: 'hockey', 
 
     owner: 'henry', 
 
     players: '10', 
 
     game_id: 4 
 
    }, 
 
    { 
 
     notes: 'Game was played', 
 
     time: '2017-10-14T20:34:30+00:00', 
 
     sport: 'soccer', 
 
     owner: 'john', 
 
     players: '12', 
 
     game_id: 5 
 
    } 
 
]; 
 

 
function extract() { 
 
    var groups = {}; 
 

 
    data.forEach(function(val) { 
 
     var date = val.time.split('T')[0]; 
 
     if (date in groups) { 
 
      groups[date].push(val.sport); 
 
     } else { 
 
      groups[date] = new Array(val.sport); 
 
     } 
 
    }); 
 

 
    console.log(groups); 
 
    return groups; 
 
} 
 

 
extract();

+0

안녕하세요 바비, 저에게 대답 해 주셔서 감사합니다. 나는 비슷한 형식으로 이미 그것을 얻고 있었다. 필자가 필요로하는 형식 (Austin이 위에 정확하게 응답 한 형식)은 다음과 같습니다. [날짜 : '날짜 문자열', 게임 : [이 날짜의 게임 배열]}]. – Blake

+0

오, 알겠습니다, D 해피 코딩! – bobbyanne

0

let a =[{ 
 
     "notes": "Game was played", 
 
     "time": "2017-10-04T20:24:30+00:00", 
 
     "sport": "hockey", 
 
     "owner": "steve", 
 
     "players": "10", 
 
     "game_id": 1, 
 
     }, 
 
     { 
 
     "notes": "Game was played", 
 
     "time": "2017-10-04T12:35:30+00:00", 
 
     "sport": "lacrosse", 
 
     "owner": "steve", 
 
     "players": "6", 
 
     "game_id": 2, 
 
     }, 
 
     { 
 
     "notes": "Game was played", 
 
     "time": "2017-10-14T20:32:30+00:00", 
 
     "sport": "hockey", 
 
     "owner": "steve", 
 
     "players": "4", 
 
     "game_id": 3, 
 
     }, 
 
     { 
 
     "notes": "Game was played", 
 
     "time": "2017-10-04T10:12:30+00:00", 
 
     "sport": "hockey", 
 
     "owner": "henry", 
 
     "players": "10", 
 
     "game_id": 4, 
 
     }, 
 
     { 
 
     "notes": "Game was played", 
 
     "time": "2017-10-14T20:34:30+00:00", 
 
     "sport": "soccer", 
 
     "owner": "john", 
 
     "players": "12", 
 
     "game_id": 5, 
 
     }] 
 

 
     let finalObj = {} 
 
     a.forEach((games) => { 
 
     const date = games.time.split('T')[0] 
 
     if (finalObj[date]) { 
 
      finalObj[date].push(games); 
 
     } else { 
 
      finalObj[date] = [games]; 
 
     } 
 
     }) 
 
     console.log(finalObj)

관련 문제