Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不使用.push()的情况下减少对象数组_Javascript_Arrays_Functional Programming - Fatal编程技术网

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,它与返回一个包含键/值对的数组相同,该数组通过使用键/
用户
和值/
数据
作为新对象进行映射。