Javascript 在不使用.push()的情况下减少对象数组
我有一组对象:Javascript 在不使用.push()的情况下减少对象数组,javascript,arrays,functional-programming,Javascript,Arrays,Functional Programming,我有一组对象: [ { user: 'User_1', date: 1603926000000, count: 3, }, { user: 'User_2', date: 1603926000000, count: 10, }, { user: 'User_2', date: 1604876400000, coun
[
{
user: 'User_1',
date: 1603926000000,
count: 3,
},
{
user: 'User_2',
date: 1603926000000,
count: 10,
},
{
user: 'User_2',
date: 1604876400000,
count: 1,
},
]
我用这个函数来减少它:
const reducedDataByDate = dataByDate.reduce((acc, d) => {
const foundUser = acc.find((a) => a.user === d.user)
const value = { date: formatDate(d.date), count: d.count }
if (!foundUser) {
acc.push({ user: d.user, data: [value] })
} else {
foundUser.data.push(value)
}
return acc
}, [])
鉴于这一结果:
[
{
user: 'User_1',
data: [
{
date: '2020-10-29',
count: 10,
},
{
date: '2020-11-09',
count: 1,
},
],
},
{
user: 'User_2',
data: [
{
date: '2020-10-29',
count: 3,
},
],
},
]
理想情况下,我不想将值推送到原始的
acc
和foundUser
数组,但我不知道该怎么做。非常感谢您的任何意见 您可以使用一个数据库收集数据,并从中获取所需的格式
const
data=[{user:'user_1',日期:1603926000000,计数:3},{user:'user_2',日期:1603926000000,计数:10},{user:'user_2',日期:1604876400000,计数:1}],
结果=Array.from(
数据还原(
(m,{user,…o})=>m.set(user,[…(m.get(user)| |[]),o]),
新地图
),
([user,data])=>({user,data})
);
控制台日志(结果)代码>
作为控制台包装{max height:100%!important;top:0;}
您想要什么?谢谢您的评论。我正在寻找一种不改变原始数组的方法。我猜函数collectDataForUser为特定用户收集所有数据,然后将结果添加到acc/foundUser中。foundUser.data[foundUser.data.length]=value
谢谢,这确实有效!然而,我真的不明白这里发生了什么([user,data])=>({user,data})
。你能澄清一下吗?数组。from
获取一个iterable,map,它与返回一个包含键/值对的数组相同,该数组通过使用键/用户
和值/数据
作为新对象进行映射。