我有一个包含日期的简单对象列表,我需要按日期对它们进行分组。 不幸的是,它似乎并没有工作。Javascript:使用日期作为数组键不起作用
这里被简化代码:
games = [
{date:"3/5/17", name:"game 1, 3"},
{date:"3/5/17", name:"game 2, 3"},
{date:"4/5/17", name:"game 3, 4"},
{date:"4/5/17", name:"game 4, 4"},
{date:"4/5/17", name:"game 5, 4"},
{date:"5/5/17", name:"game 6, 5"},
{date:"5/5/17", name:"game 7, 5"},
]
let games_by_date = []
games.map((i)=>{
if(!games_by_date[i['date']])
games_by_date[i['date']]=[];
games_by_date[i['date']].push(i);
})
console.log(games_by_date) // shows [3/5/17: Array[2], 4/5/17: Array[3], 5/5/17: Array[2]], but shows it as Array[0]
console.log(games_by_date[0]) // undefined
console.log(games_by_date[1]) // undefined
games_by_date.map((g)=>console.log(g)) // doesn't even gets there
如果我做相同的,但使用不同的列,它的正常工作。
games = [
\t {date:"3/5/17", day:"3", name:"game 1, 3"},
\t {date:"3/5/17", day:"3", name:"game 2, 3"},
\t {date:"4/5/17", day:"4", name:"game 3, 4"},
\t {date:"4/5/17", day:"4", name:"game 4, 4"},
\t {date:"4/5/17", day:"4", name:"game 5, 4"},
\t {date:"5/5/17", day:"5", name:"game 6, 5"},
\t {date:"5/5/17", day:"5", name:"game 7, 5"},
]
let games_by_date = []
games.map((i)=>{
\t if(!games_by_date[i['date']])
\t games_by_date[i['date']]=[];
games_by_date[i['date']].push(i);
})
console.log(games_by_date)
console.log(games_by_date[0])
console.log(games_by_date[1])
games_by_date.map((g, d)=>console.log(d, g))
console.log("--------------------")
let games_by_day = []
games.map((i)=>{
\t if(!games_by_day[i['day']])
\t games_by_day[i['day']]=[];
games_by_day[i['day']].push(i);
})
console.log(games_by_day)
console.log(games_by_day[0])
console.log(games_by_day[1])
games_by_day.map((g, d)=>console.log(d, g))
如此看来,因为我使用的密钥类型的发生。
你有没有遇到过它,你是如何解决它的? 感谢
请注意,他必须将他的'games_by_date'更改为一个对象而不是数组,这是一个可靠的答案。 (为了清晰起见,您还可以将'res'重命名为'games_by_date') –
指出并链接到您的答案以供@LiamGray进一步解释。 – baao
感谢队友,'.reduce'的+1,因为它是OP想干的代码风格! –