我有一個滿足以下條件的作業程式,但我想知道是否有更有效的解決方案。目前,我應用了 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);
uj5u.com熱心網友回復:
您可以鏈接所有操作。
實際上,它通過過濾唯一的姓氏并在后排序或通過先排序然后再過濾來回傳不同的結果。
const
GOOGLE_ORG = 'Google',
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' }],
result = employees
.filter(({ organization }) => organization === GOOGLE_ORG)
.filter((s => ({ lastName }) => !s.has(lastName) && s.add(lastName))(new Set))
.sort((a, b) => a.id - b.id)
.map(o => ({ ...o, fullName: o.firstName o.lastName }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
是的,您可以使用Array.prototype.reduce來最小化創建陣列和迭代次數。
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) => {
return (employees.reduce((lastNames => ((acc, curr) => {
if(!lastNames.has(curr.lastName) && curr.organization === org) {
lastNames.add(curr.lastName)
acc.push({...curr, fullName: `${curr.firstName} ${curr.lastName}`})
}
return acc;
}))(new Set()), []).sort((a, b) => a.id - b.id));
};
console.log(transformArray(GOOGLE_ORG));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399718.html
標籤:javascript 节点.js 数组
