减少具有相同值的对象数组
Reduce Object array with same values
我有一个 Javascript 对象数组,其中包含两个重要值 date
和 status
我想将它们缩减为唯一日期数组,其中所有值都被解析为一个对象,其中包含每个状态和日期。
我试过使用 reduce 函数,但我似乎无法正确收集 date
s,因此无法正确收集所有数据。
独特的状态是:"System Labelled", "Discarded", "Saved", "Reviewed"
例如:
[{status: "System Labelled", date: Thu Mar 05 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{status: "System Labelled", date: Thu Mar 05 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{status: "System Labelled", date: Thu Mar 05 2020 02:00:00 GMT+0200 (Central European Summer Time)},
{status: "Discarded", date: Tue Mar 10 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{status: "Saved", date: Sat Jan 11 2020 01:00:00 GMT+0100 (Central European Standard Time)}]
---->
[{System Labelled: 1, Discarded: 0, Saved: 0, Reviwed: 0, date: Thu Mar 05 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{System Labelled: 2, Discarded: 0, Saved: 0, Reviwed: 0, date: Sun Apr 05 2020 02:00:00 GMT+0200 (Central European Summer Time)},
{System Labelled: 0, Discarded: 1, Saved: 0, Reviwed: 0, date: Tue Mar 10 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{System Labelled: 0, Discarded: 0, Saved: 1, Reviwed: 0, date: Sat Jan 11 2020 01:00:00 GMT+0100 (Central European Standard Time)},
这是我目前的代码:
const objects= [{status: "System Labelled", date: new Date("19-03-2020")},
{status: "System Labelled", date: new Date("19-03-2020")},
{status: "Discarded", date: new Date("19-03-2020")},
{status: "Saved", date: new Date("19-03-2020")}]
objects.reduce((acc, curr) =>{
console.log(acc.includes(curr.status))
if(acc.includes(curr.status)){
curr[acc.status]++
}
},[])
如果您获取每个日期的时间戳,然后将其作为字符串添加到必须创建一个字符串的状态之后,会怎样。
示例对象
[{状态:"System Labelled",日期:2020 年 3 月 5 日星期四 01:00:00 GMT+0100(欧洲中部标准时间)}
会是
"System Labelled 1583366400"
然后您可以将时间戳子串化以再次将其转换为日期
您可以取一个对象进行分组,并将值作为结果数组。
您需要有效的日期。
const
statuses = ["System Labelled", "Discarded", "Saved", "Reviewed"],
objects = [{ status: "System Labelled", date: "2020-03-19" }, { status: "System Labelled", date: "2020-03-19" }, { status: "Discarded", date: "2020-03-19" }, { status: "Saved", date: "2020-03-19" }],
result = Object.values(objects.reduce((acc, { status, date }) => {
acc[date] = acc[date] || { date, ...Object.fromEntries(statuses.map(k => [k, 0])) };
acc[date][status]++;
return acc;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我有一个 Javascript 对象数组,其中包含两个重要值 date
和 status
我想将它们缩减为唯一日期数组,其中所有值都被解析为一个对象,其中包含每个状态和日期。
我试过使用 reduce 函数,但我似乎无法正确收集 date
s,因此无法正确收集所有数据。
独特的状态是:"System Labelled", "Discarded", "Saved", "Reviewed"
例如:
[{status: "System Labelled", date: Thu Mar 05 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{status: "System Labelled", date: Thu Mar 05 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{status: "System Labelled", date: Thu Mar 05 2020 02:00:00 GMT+0200 (Central European Summer Time)},
{status: "Discarded", date: Tue Mar 10 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{status: "Saved", date: Sat Jan 11 2020 01:00:00 GMT+0100 (Central European Standard Time)}]
---->
[{System Labelled: 1, Discarded: 0, Saved: 0, Reviwed: 0, date: Thu Mar 05 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{System Labelled: 2, Discarded: 0, Saved: 0, Reviwed: 0, date: Sun Apr 05 2020 02:00:00 GMT+0200 (Central European Summer Time)},
{System Labelled: 0, Discarded: 1, Saved: 0, Reviwed: 0, date: Tue Mar 10 2020 01:00:00 GMT+0100 (Central European Standard Time)},
{System Labelled: 0, Discarded: 0, Saved: 1, Reviwed: 0, date: Sat Jan 11 2020 01:00:00 GMT+0100 (Central European Standard Time)},
这是我目前的代码:
const objects= [{status: "System Labelled", date: new Date("19-03-2020")},
{status: "System Labelled", date: new Date("19-03-2020")},
{status: "Discarded", date: new Date("19-03-2020")},
{status: "Saved", date: new Date("19-03-2020")}]
objects.reduce((acc, curr) =>{
console.log(acc.includes(curr.status))
if(acc.includes(curr.status)){
curr[acc.status]++
}
},[])
如果您获取每个日期的时间戳,然后将其作为字符串添加到必须创建一个字符串的状态之后,会怎样。
示例对象
[{状态:"System Labelled",日期:2020 年 3 月 5 日星期四 01:00:00 GMT+0100(欧洲中部标准时间)}
会是
"System Labelled 1583366400"
然后您可以将时间戳子串化以再次将其转换为日期
您可以取一个对象进行分组,并将值作为结果数组。
您需要有效的日期。
const
statuses = ["System Labelled", "Discarded", "Saved", "Reviewed"],
objects = [{ status: "System Labelled", date: "2020-03-19" }, { status: "System Labelled", date: "2020-03-19" }, { status: "Discarded", date: "2020-03-19" }, { status: "Saved", date: "2020-03-19" }],
result = Object.values(objects.reduce((acc, { status, date }) => {
acc[date] = acc[date] || { date, ...Object.fromEntries(statuses.map(k => [k, 0])) };
acc[date][status]++;
return acc;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }