Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 如何按键名对对象数组进行分组?_Javascript_Arrays_Object_Ecmascript 6 - Fatal编程技术网

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!