【发布时间】:2021-12-31 11:51:53
【问题描述】:
我有一个满足以下条件的工作程序,但我想知道是否有更有效的解决方案。目前,我应用了 4 种不同的 Javascript 数组方法转换,这导致为每个转换返回一个新数组,总共 4 个新数组。可以将这些转换组合以仅创建 1 个附加数组而不是 4 个新数组吗?我可以将调用链接在一起,但我认为可以将它们全部组合到 reduce() 方法中,但我不确定这会是什么样子,或者是否有更好的解决方案。
需要满足的条件:
- 仅包括来自 Google 组织的员工,但允许将其作为输入参数传递
- 姓氏应该是唯一的(没有重复的姓氏)
- 员工应按 ID 排序(升序)
- 每个员工都应该有一个名为 fullName 的附加属性,它是名字和姓氏的组合,用空格分隔
const GOOGLE_ORG = 'Google';
const employees = [
{
id: 3,
firstName: 'John',
lastName: 'Doe',
organization: 'Google',
},
{
id: 7,
firstName: 'Jake',
lastName: 'Smith',
organization: 'Google',
},
{
id: 1,
firstName: 'Jane',
lastName: 'Doe',
organization: 'Google',
},
{
id: 2,
firstName: 'Vanessa',
lastName: 'Smith',
organization: 'Meta',
},
{
id: 5,
firstName: 'Sarah',
lastName: 'Hernandez',
organization: 'Meta',
},
{
id: 8,
firstName: 'Jessica',
lastName: 'Morales',
organization: 'Google',
},
{
id: 4,
firstName: 'Paul',
lastName: 'Stark',
organization: 'Google',
},
{
id: 6,
firstName: 'Peter',
lastName: 'Brown',
organization: 'Meta',
},
];
const transformArray = (org) => {
const filteredByOrg = employees.filter((employee) => employee.organization === org);
const addedFullName = filteredByOrg.map((employee) => ({
...employee,
fullName: employee.firstName + ' ' + employee.lastName,
}));
const uniqueByLastName = [...addedFullName.reduce((map, obj) => map.set(obj.lastName, obj), new Map()).values()];
return uniqueByLastName.sort((a, b) => a.id - b.id);
};
transformArray(GOOGLE_ORG);
【问题讨论】:
-
例如,您可以写
map.set(obj.lastName, { ...obj, fullName: obj.firstName + " " + obj.lastName })并删除map,而不是map.set(obj.lastName, obj)。就个人而言,我更喜欢您的拆分方法,因为它更具可读性,但我会尽可能链接方法调用。您也可以考虑使用Iterator Helpers。
标签: javascript node.js arrays