請幫助重構js中的物件。
const o = [
{
id: 1612,
Tasks: 'Remuneration sheet mentain.',
calendar_year: 2021,
calendar_week_in_year: 45,
WeekStartDate: '2021-10-31',
WeekEndDate: '2021-11-06',
status: 'Done',
},
{
id: 1612,
Tasks: 'Remuneration sheet mentain.',
calendar_year: 2021,
calendar_week_in_year: 46,
WeekStartDate: '2021-11-28',
WeekEndDate: '2021-12-04',
status: 'Done',
},
{
id: 1939,
Tasks: 'Debtors Reconciliation',
calendar_year: 2021,
calendar_week_in_year: 45,
WeekStartDate: '2021-10-31',
WeekEndDate: '2021-11-06',
status: 'Done',
},
{
id: 1939,
Tasks: 'Debtors Reconciliation',
calendar_year: 2021,
calendar_week_in_year: 46,
WeekStartDate: '2021-11-28',
WeekEndDate: '2021-12-04',
status: 'Done',
},
];
const required = [
{
id: 1612,
Tasks: 'Remuneration sheet mentain.',
week: [
{ w_no: 45, calendar_year: 2021, WeekStartDate: '2021-10-31', WeekEndDate: '2021-11-06', status: 'Done' },
{ w_no: 46, calendar_year: 2021, WeekStartDate: '2021-11-28', WeekEndDate: '2021-12-04', status: 'Done' },
],
},
{
id: 1939,
Tasks: 'Debtors Reconciliation',
week: [
{ w_no: 45, calendar_year: 2021, WeekStartDate: '2021-10-31', WeekEndDate: '2021-11-06', status: 'Done' },
{ w_no: 46, calendar_year: 2021, WeekStartDate: '2021-11-28', WeekEndDate: '2021-12-04', status: 'Done' },
],
},
];
uj5u.com熱心網友回復:
這實際上只是一個“分組依據”分組,id并在陣列中累積相關屬性。這里使用reduce()和解構來隔離迭代物件的必要屬性。
const o = [{ id: 1612, Tasks: 'Remuneration sheet mentain.', calendar_year: 2021, calendar_week_in_year: 45, WeekStartDate: '2021-10-31', WeekEndDate: '2021-11-06', status: 'Done', }, { id: 1612, Tasks: 'Remuneration sheet mentain.', calendar_year: 2021, calendar_week_in_year: 46, WeekStartDate: '2021-11-28', WeekEndDate: '2021-12-04', status: 'Done', }, { id: 1939, Tasks: 'Debtors Reconciliation', calendar_year: 2021, calendar_week_in_year: 45, WeekStartDate: '2021-10-31', WeekEndDate: '2021-11-06', status: 'Done', }, { id: 1939, Tasks: 'Debtors Reconciliation', calendar_year: 2021, calendar_week_in_year: 46, WeekStartDate: '2021-11-28', WeekEndDate: '2021-12-04', status: 'Done', },];
const result = Object.values(
o.reduce((a, { id, Tasks, ...week }) => {
(a[id] ??= { id, Tasks, week: [] }).week.push(week);
return a;
}, {})
);
console.log(result);
上面使用邏輯空賦值 (??=)如果出于兼容性原因需要替換它,您可以使用 OR 短路
(a[id] || (a[id] = { id, Tasks, week: [] })).week.push(week);
顯示代碼片段
const o = [{ id: 1612, Tasks: 'Remuneration sheet mentain.', calendar_year: 2021, calendar_week_in_year: 45, WeekStartDate: '2021-10-31', WeekEndDate: '2021-11-06', status: 'Done', }, { id: 1612, Tasks: 'Remuneration sheet mentain.', calendar_year: 2021, calendar_week_in_year: 46, WeekStartDate: '2021-11-28', WeekEndDate: '2021-12-04', status: 'Done', }, { id: 1939, Tasks: 'Debtors Reconciliation', calendar_year: 2021, calendar_week_in_year: 45, WeekStartDate: '2021-10-31', WeekEndDate: '2021-11-06', status: 'Done', }, { id: 1939, Tasks: 'Debtors Reconciliation', calendar_year: 2021, calendar_week_in_year: 46, WeekStartDate: '2021-11-28', WeekEndDate: '2021-12-04', status: 'Done', },];
const result = Object.values(
o.reduce((a, { id, Tasks, ...week }) => {
(a[id] || (a[id] = { id, Tasks, week: [] })).week.push(week);
return a;
}, {})
);
console.log(result);
但是可讀性比緊湊性好,所以你也可以把它完整地寫出來
if (a[id] === undefined) {
a[id] = { id, Tasks, week: [] };
}
a[id].week.push(week);
顯示代碼片段
const o = [{ id: 1612, Tasks: 'Remuneration sheet mentain.', calendar_year: 2021, calendar_week_in_year: 45, WeekStartDate: '2021-10-31', WeekEndDate: '2021-11-06', status: 'Done', }, { id: 1612, Tasks: 'Remuneration sheet mentain.', calendar_year: 2021, calendar_week_in_year: 46, WeekStartDate: '2021-11-28', WeekEndDate: '2021-12-04', status: 'Done', }, { id: 1939, Tasks: 'Debtors Reconciliation', calendar_year: 2021, calendar_week_in_year: 45, WeekStartDate: '2021-10-31', WeekEndDate: '2021-11-06', status: 'Done', }, { id: 1939, Tasks: 'Debtors Reconciliation', calendar_year: 2021, calendar_week_in_year: 46, WeekStartDate: '2021-11-28', WeekEndDate: '2021-12-04', status: 'Done', },];
const result = Object.values(
o.reduce((a, { id, Tasks, ...week }) => {
if (a[id] === undefined) {
a[id] = { id, Tasks, week: [] };
}
a[id].week.push(week);
return a;
}, {})
);
console.log(result);
uj5u.com熱心網友回復:
我認為你想要做的是一個嵌套陣列?
我不完全確定您要實作的目標,因為代碼格式不正確,但是請嘗試谷歌搜索嵌套陣列。
應該是這樣的:
{id: ,Task: ,Week:[]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/371794.html
標籤:javascript 数组 目的
下一篇:如何將物件陣列轉換為鍵值對
