如何将对象数组操作为不同的键和值? [复制]
Posted
技术标签:
【中文标题】如何将对象数组操作为不同的键和值? [复制]【英文标题】:How to manipulate an array of object into a different key and value? [duplicate] 【发布时间】:2021-08-07 23:25:07 【问题描述】:所以我有这个数组:
[date: "5/7/2021", name: "bob",
date: "5/6/2021", name: "bob",
date: "5/6/2021", name: "bob",
date: "5/6/2021", name: "bob",]
如何使数组变成:
[ "5/6/2021" : 3, // 3 because there are 3 data with 5/6/2021 date
"5/7/2021" : 1] // 1 because there are 1 data with 5/7/2021 date
我的进步。 updatedSales 是数组名(编辑)
const temp = updatedSales.reduce((acc, name, date ) =>
acc[name] = acc[name] || name, dates: new Set(), totalSubmit: 0 ;
acc[name].totalSubmit++;
acc[name].dates.add(date);
return acc;
, );
const result = Object.values(temp).map(( name, dates, totalSubmit ) => ( name, uniqueDate: dates.size, totalSubmit ));
const updatedSales=[date: "5/7/2021", name: "bob",
date: "5/6/2021", name: "bob",
date: "5/6/2021", name: "bob",
date: "5/6/2021", name: "bob",]
const temp = updatedSales.reduce((acc, name, date ) =>
acc[name] = acc[name] || name, dates: new Set(), totalSubmit: 0 ;
acc[name].totalSubmit++;
acc[name].dates.add(date);
return acc;
, );
const result = Object.values(temp).map(( name, dates, totalSubmit ) => ( name, uniqueDate: dates.size, totalSubmit ));
console.log(result)
期望:
[ "5/6/2021" : 3, // 3 because there are 3 data with 5/6/2021 date
"5/7/2021" : 1]
现在:
[name: "bob", uniqueDate: 3, totalSubmit: 36,
name: "steve", uniqueDate: 12, totalSubmit: 116]
我想要的输出是不同的日期,而不是名称。所以它像“5/6/2021”而不是“bob”。
【问题讨论】:
请显示一些您尝试过的代码 所以要明确一点,updatedSales 是数组的名称。此代码用于其他目的,但这是我迄今为止的进展。 (编辑:我会把我的进度放在编辑中)@koralarts 看起来你基本上就在那里。你的实际问题是什么?在提出未来问题之前,请阅读how to ask。 “需要帮助”和“如何操作”是什么意思?你具体遇到什么问题?您看到哪些输出与您的期望不符,您遇到了哪些问题? 您目前正在按name
分组。尝试将.reduce()
-callback 函数中的name
替换为date
。那么你应该已经更接近你想要的了。
【参考方案1】:
只需对您的脚本进行几次触摸,您就会得到:
const updatedSales=[date: "5/7/2021", name: "bob",
date: "5/6/2021", name: "bob",
date: "5/6/2021", name: "bob",
date: "5/6/2021", name: "bob",]
const temp = updatedSales.reduce((acc, name, date ) =>
acc[date] = acc[date] || date, dates: new Set(), totalSubmit: 0 ;
acc[date].totalSubmit++;
acc[date].dates.add(date);
return acc;
, );
const result = Object.values(temp).map(( date, dates, totalSubmit ) => ( [date]: totalSubmit ) );
console.log(result)
或者,如果你真的想,你可以把它简化为“单线”:
const result = Object.entries(
updatedSales.reduce((a,date) =>
a[date] = (a[date] || 0) + 1;
return a;
, ) ).map(([k,v])=> ( [k]:v ) );
new Set()
在这里并不是真正需要的。
【讨论】:
您好,非常感谢您的帮助,您介意检查一下吗:***.com/questions/67592355/…?对此,我真的非常感激。祝你有美好的一天!以上是关于如何将对象数组操作为不同的键和值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章