Javascript 循环并映射数组中的对象和按值分组
我试图通过创建活动的销售人员在我的数据中对活动进行分组,但使用不同的JS数组方法继续循环 我已经过滤了我的主数据集,以返回那些具有销售人员用户角色的数据集 我有我的活动数据,显示谁创建了这些活动 我现在必须按销售人员对它们进行分组 在我看来,我将其视为活动数组中每个活动对象的循环/映射,检查createdBy名称并返回一个新的对象数组,该数组的结果按createdBy名称分组 在我的脑海里听起来很容易,但无法回避 我总结了以下几点:Javascript 循环并映射数组中的对象和按值分组,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我试图通过创建活动的销售人员在我的数据中对活动进行分组,但使用不同的JS数组方法继续循环 我已经过滤了我的主数据集,以返回那些具有销售人员用户角色的数据集 我有我的活动数据,显示谁创建了这些活动 我现在必须按销售人员对它们进行分组 在我看来,我将其视为活动数组中每个活动对象的循环/映射,检查createdBy名称并返回一个新的对象数组,该数组的结果按createdBy名称分组 在我的脑海里听起来很容易,但无法回避 我总结了以下几点: const filtered=usersData.filter
const filtered=usersData.filter((val)=>val.role=='sales');
//这将以以下格式仅返回所有可能用户角色中的销售人员:
主动:正确
创建日期:“2019-04-11T21:00:00.000Z”
电子邮件:“eliana@example.com"
姓名:“亚历山大·汤姆·琼斯”
电话:3044283743
角色:“销售”
_id:“5c8a20d32f8fb814b56fa187”
//我的活动数据包含销售人员的姓名:
预算:57154564
公司:“销售公司”
创建日期:“2020-07-30T09:03:51.925Z”
创建人:“销售用户”
创建者id:“5f228c8d58769fc7d556a6fa”
结束日期:“2020-11-08T00:00:00.000Z”
删除:错误
地点:“赫尔辛基”
名称:“销售测试活动”
//使用此功能,我可以逐个返回销售人员创建的所有活动:
const filteredCampaigns=活动数据.filter(
(val)=>val.createdBy===“销售用户”
);
我就是不知道如何“循环”每个销售人员
我已经看过map/reduce和groupby解决方案,但没有一个能与之相提并论。哪里出错了?对于按属性分组,您通常希望在如下模式中使用:
const bySalesPerson = campaignData.reduce((records, record) => {
// get the property to group by, replace with the
// actual property name you want (createdBy?)
const { salesPerson } = record;
// check if it exists in our accumulator object, if not
// assign empty array
if (!(salesPerson in records)) records[salesPerson] = [];
// push current record into the array associated with
// that value of the property, in this case a particular
// sales person
records[salesPerson].push(record);
// return the accumulator object from the callback
return records;
}, {});
您可以使用此方法按销售用户分组。只需像这样调用此方法:
constgrouped=groupBy(活动数据,['createdBy'])代码>
假设数组包含对象,则可以使用过滤器功能
const活动数据=[{
预算:57154564,
公司:“销售公司”,
创建日期:“2020-07-30T09:03:51.925Z”,
createdBy:“销售用户”,
创建者id:“5f228c8d58769fc7d556a6fa”,
结束日期:“2020-11-08T00:00:00.000Z”,
isDeleted:错,
地点:“赫尔辛基”,
名称:“销售测试活动”
},
{
预算:10,
公司:“销售公司”,
创建日期:“2020-07-29T09:03:51.925Z”,
createdBy:“购买用户”,
创建者id:“5f228c8d58769fc7d556a6fb”,
结束日期:“2020-12-08T00:00:00.000Z”,
isDeleted:错,
地点:“斯德哥尔摩”,
名称:“销售测试活动”
}
];
const filteredCampaigns=活动数据.filter(
职能(项目){
return item.createdBy==“销售用户”;
}
);
console.log(filteredCampaigns)代码>这将创建一个嵌套数组,但通常在按属性分组时,您希望能够通过传递属性值(即在属性值上散列的对象中)来获取所有记录。这正是我所需要的。谢谢你的详细回复。也帮助我理解了很多解决方案。
groupBy(xs, key) {
return xs.reduce((rv, x) => {
const v = x[key];
const el = rv.find((r) => r && r.key === v);
if (el) {
el.values.push(x);
} else {
rv.push({
key: v,
values: [x]
});
}
return rv;
}, []);
}