Javascript 如何按键名对对象数组进行分组?
我有一个对象数组,我想按对象的键名对它们进行分组。我曾尝试使用Javascript 如何按键名对对象数组进行分组?,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,我有一个对象数组,我想按对象的键名对它们进行分组。我曾尝试使用Array.reduce()执行此操作,但结果并不理想,因为它是按值分组的。这是我所拥有的一个数组示例,也是我迄今为止所尝试的示例 const rawData=[ { “EmailCampaignEvents.campaignRef”:“我的第一次活动”, “EmailCampaignEvents.customerRef”:“客户/0”, “EmailCampaignEvents.emailRef”:“客户/0”, “EmailCa
Array.reduce()
执行此操作,但结果并不理想,因为它是按值分组的。这是我所拥有的一个数组示例,也是我迄今为止所尝试的示例
const rawData=[
{
“EmailCampaignEvents.campaignRef”:“我的第一次活动”,
“EmailCampaignEvents.customerRef”:“客户/0”,
“EmailCampaignEvents.emailRef”:“客户/0”,
“EmailCampaignEvents.eventType”:“初始打开”,
“EmailCampaignEvents.occurredAt”:“2021-02-25T14:03:04.000”
},
{
“EmailCampaignEvents.campaignRef”:“我的第二次竞选”,
“EmailCampaignEvents.customerRef”:“Customer/123”,
“EmailCampaignEvents.emailRef”:“客户/123”,
“EmailCampaignEvents.eventType”:“传递”,
“EmailCampaignEvents.occurredAt:“2021-03-25T14:03:04.000”
},
{
“事件发生日期”:“2020-11-11T15:44:07.000”,
“Events.relatedEntityRefFlat”:“Customer/6711684”,
“Events.type”:“as.commerce.transaction.completed”
}
];
结果=rawData.reduce(函数(r,a){
r[a[“EmailCampaignEvents.eventType”]=r[a[“EmailCampaignEvents.eventType”]]| |[];
r[a[“EmailCampaignEvents.eventType”].push(a);
r[a[“Events.type”]=r[a[“Events.type”]]| |[];
r[a[“Events.type”].push(a);
返回r;
},Object.create(null));
控制台日志(结果)代码>您可以检查对象中是否存在'Events.type'
,然后将此字符串作为组的键,否则将'EmailActivationEvents.eventType'
作为键
const
rawData=[{“EmailCampaignEvents.campaignRef”:“我的第一次活动”、“EmailCampaignEvents.customerRef”:“客户/0”、“EmailCampaignEvents.emailRef”:“客户/0”、“EmailCampaignEvents.eventType”:“初始打开”、“EmailCampaignEvents.occurredAt”:“2021-02-25T14:03:04.000”}、{“EmailCampaignEvents.campaignRef”:“我的第二次活动”,“EmailCampaignEvents.customerRef:“Customer/123”,“EmailCampaignEvents.emailRef:“Customer/123”,“EmailCampaignEvents.eventType:“delivery”,“EmailCampaignEvents.OccurDat:“2021-03-25T14:03:04.000”],{“Events.OccurDat:“2020-11-11T15:44:07.000”,“Events.relatedEntityRefFlat:“Customer/6711684”,“Events.type:”as.commerce.transaction.completed“}],
结果=原始数据。减少((r,o)=>{
const key='Events.type'在o中
?“事件类型”
:'EmailCampaignEvents.eventType';
(r[键]??=[])。按(o);
返回r;
},Object.create(null));
console.log(结果);
。作为控制台包装器{max height:100%!important;top:0;}
如何调用“?=”?以前从未见过它。@LucasFabre,@NinaScholz它返回此解析错误:预期表达式。
用于空赋值。为什么?在这种情况下,您可以用逻辑OR(r[key]??=[])来替换(r[key]?=])。按(o);
[键]| |[])。按(o);
@NinaScholz Danke!