【发布时间】:2017-10-18 03:44:39
【问题描述】:
给定以下对象数组:
[
{
"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,
}
]
我正在尝试创建一个新数组,该数组将创建一个包含每个日期(作为键)的对象以及在同一对象中的游戏(另一个键)下列出的该日期所玩的任何游戏。
新数组应如下所示:
[
{
date:'date string',
games:[array of games played on the date]
},
{
date: 'other date',
games:[games under the other date]
}
]...
这是我所做的:
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]);
}
我的版本返回一个以日期为值的数组,然后在其中列出游戏,但我试图将它们作为不同的键列出在同一个对象中。
任何帮助或指导将不胜感激。
【问题讨论】:
-
到目前为止您尝试过什么?这里的解决方案很简单。
-
嗨 Spencer,我不确定如何在 cmets 中发布代码,但我创建了一个空数组,并运行了一个 for 循环来迭代第一个信息。我将原始日期切片以获取 (yyyy-mm-dd) 中的格式,然后创建另一个 for 循环以检查该日期是否存在于当前空数组中,如果不存在,我将为此创建一个新键日期,然后将任何游戏传入游戏密钥。一开始我遇到了一个无限循环,我的内存崩溃了,然后我一直覆盖我以前的对象。
-
您不想在 cmets 中发布您的代码,而是将其添加为问题的编辑。
-
您的意思是要将键设置为日期,不包括时间吗?所以会有
2017-10-14和2017-10-04作为键? -
嗨斯宾塞,我更新了我的帖子以显示我所做的......我得到了与发布的另一个答案类似的结果,但我想要做的是获取一个带有对象的数组对于每个日期,它都有自己的密钥,以及玩游戏的另一个密钥。所以 [{date: 'date string', games: [array of games]}]
标签: javascript arrays for-loop iteration grouping