gpt4 book ai didi

Javascript:使用日期作为数组键不起作用

转载 作者:行者123 更新时间:2023-11-28 13:10:56 24 4
gpt4 key购买 nike

我有一个包含日期的简单对象列表,我需要按日期对它们进行分组。不幸的是,它似乎不起作用。

这是简化的代码:

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 = [
{date:"3/5/17", day:"3", name:"game 1, 3"},
{date:"3/5/17", day:"3", name:"game 2, 3"},
{date:"4/5/17", day:"4", name:"game 3, 4"},
{date:"4/5/17", day:"4", name:"game 4, 4"},
{date:"4/5/17", day:"4", name:"game 5, 4"},
{date:"5/5/17", day:"5", name:"game 6, 5"},
{date:"5/5/17", day:"5", 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)
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)=>{
if(!games_by_day[i['day']])
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) )

所以这似乎是由于我使用的 key 类型而发生的。

您遇到过这个问题吗?您是如何解决的?谢谢

最佳答案

您可以使用reduce按键分组:

let 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.reduce((a,b) => {
a[b.date] = a[b.date] ? a[b.date].concat(b) : [b];
return a;
}, {});

console.log(games_by_date);

由于“日期”只是字符串,因此它们应该不会有问题。

正如 @Liam 正确指出的那样,这将创建一个对象而不是数组,有关此问题的完整说明请参阅 @Liam's answer

关于Javascript:使用日期作为数组键不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42497021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com