JS中如何对数据进行分组?
How to group the data in JS?
在我的简单 JS 应用程序中,我需要按顺序显示数据。
流量:
用户首先选择扇区,所以我们有基于用户选择的扇区数据,
const selectedSectors = [{sectorName: "Sector One", sectorId: 5}, {sectorName: "Sector Two", sectorId: 24}]
那么我们已经有了部门和职位的数据,我们正在通过代码获取匹配的记录,
const selectedSectors = [{sectorName: "Sector One", sectorId: 5}, {sectorName: "Sector Two", sectorId: 24}]
const departments = [{"DepartmentID":51,"SectorID":5,"Name":"Production","SortOrder":1},{"DepartmentID":52,"SectorID":5,"Name":"Design/Engineering","SortOrder":2},{"DepartmentID":92,"SectorID":24,"Name":"Consulting","SortOrder":8},{"DepartmentID":114,"SectorID":24,"Name":"Administration","SortOrder":5}]
const jobTitles = [{"JobTitleID":167,"DepartmentID":51,"JobName":"Production Manager","Deleted":false,"SortOrder":5},{"JobTitleID":294,"DepartmentID":52,"JobName":"Senior Truss Designer","Deleted":false,"SortOrder":5},{"JobTitleID":178,"DepartmentID":51,"JobName":"Production Supervisor","Deleted":false,"SortOrder":3},{"JobTitleID":191,"DepartmentID":92,"JobName":"Saw Shop Supervisor","Deleted":false,"SortOrder":1},{"JobTitleID":461,"DepartmentID":114,"JobName":"Sawyer","Deleted":false,"SortOrder":7},{"JobTitleID":461,"DepartmentID":66,"JobName":"Sawyer","Deleted":false,"SortOrder":7},{"JobTitleID":474,"DepartmentID":92,"JobName":"Senior Truss Designer - Part Time","Deleted":false,"SortOrder":11},{"JobTitleID":449,"DepartmentID":51,"JobName":"Senior Wall Panel Designer","Deleted":false,"SortOrder":15},{"JobTitleID":278,"DepartmentID":114,"JobName":"Service Manager","Deleted":false,"SortOrder":2}]
const filteredData = departments.flatMap(department => {
const jobtitles= jobTitles.filter(
(jobTitle) => jobTitle.DepartmentID === department.DepartmentID
);
const newObj = {
deptName: department.Name,
jobtitles,
};
return newObj;
})
console.log('filteredData ', filteredData)
上面的代码产生如下结果,
当前输出:
[
{
"deptName":"Production",
"jobtitles":[
{
"JobTitleID":167,
"DepartmentID":51,
"JobName":"Production Manager",
"Deleted":false,
"SortOrder":5
},
{
"JobTitleID":178,
"DepartmentID":51,
"JobName":"Production Supervisor",
"Deleted":false,
"SortOrder":3
},
{
"JobTitleID":449,
"DepartmentID":51,
"JobName":"Senior Wall Panel Designer",
"Deleted":false,
"SortOrder":15
}
]
},
{
"deptName":"Design/Engineering",
"jobtitles":[
{
"JobTitleID":294,
"DepartmentID":52,
"JobName":"Senior Truss Designer",
"Deleted":false,
"SortOrder":5
}
]
},
{
"deptName":"Consulting",
"jobtitles":[
{
"JobTitleID":191,
"DepartmentID":92,
"JobName":"Saw Shop Supervisor",
"Deleted":false,
"SortOrder":1
},
{
"JobTitleID":474,
"DepartmentID":92,
"JobName":"Senior Truss Designer - Part Time",
"Deleted":false,
"SortOrder":11
}
]
},
{
"deptName":"Administration",
"jobtitles":[
{
"JobTitleID":461,
"DepartmentID":114,
"JobName":"Sawyer",
"Deleted":false,
"SortOrder":7
},
{
"JobTitleID":278,
"DepartmentID":114,
"JobName":"Service Manager",
"Deleted":false,
"SortOrder":2
}
]
}
]
以上是基于编写的代码所期望的。并过滤departments
和jobtitles
中匹配DepartmentID
的数据。但是我错过了显示数据以及 Sectors
..
所以用户选择 Sector
基于 department
和部门的 jobtitles
必须显示。
所以我希望水平完全一样,
预期输出:
[
{
"sectorid":5,
"SectorName":"Sector One",
"departments":[
{
"deptName":"Production",
"jobtitles":[
{
"JobTitleID":167,
"DepartmentID":51,
"JobName":"Production Manager",
"Deleted":false,
"SortOrder":5
},
{
"JobTitleID":178,
"DepartmentID":51,
"JobName":"Production Supervisor",
"Deleted":false,
"SortOrder":3
},
{
"JobTitleID":449,
"DepartmentID":51,
"JobName":"Senior Wall Panel Designer",
"Deleted":false,
"SortOrder":15
}
]
},
{
"deptName":"Design/Engineering",
"jobtitles":[
{
"JobTitleID":294,
"DepartmentID":52,
"JobName":"Senior Truss Designer",
"Deleted":false,
"SortOrder":5
}
]
}
]
},
{
"sectorId":24,
"SectorName":"Sector Two",
"departments":[
{
"deptName":"Consulting",
"jobtitles":[
{
"JobTitleID":191,
"DepartmentID":92,
"JobName":"Saw Shop Supervisor",
"Deleted":false,
"SortOrder":1
},
{
"JobTitleID":474,
"DepartmentID":92,
"JobName":"Senior Truss Designer - Part Time",
"Deleted":false,
"SortOrder":11
}
]
},
{
"deptName":"Administration",
"jobtitles":[
{
"JobTitleID":461,
"DepartmentID":114,
"JobName":"Sawyer",
"Deleted":false,
"SortOrder":7
},
{
"JobTitleID":278,
"DepartmentID":114,
"JobName":"Service Manager",
"Deleted":false,
"SortOrder":2
}
]
}
]
}
]
根据上面给出的数据,很明显 sectorId: 5
有 2 个独立的部门 [Production and Design/Engineering]
而 sectorId: 24
有 2 个独立的部门 [Consulting and Administration]
..
const selectedSectors = [{sectorName: "Sector One", sectorId: 5}, {sectorName: "Sector Two", sectorId: 24}]
const departments = [{"DepartmentID":51,"SectorID":5,"Name":"Production","SortOrder":1},{"DepartmentID":52,"SectorID":5,"Name":"Design/Engineering","SortOrder":2},{"DepartmentID":92,"SectorID":24,"Name":"Consulting","SortOrder":8},{"DepartmentID":114,"SectorID":24,"Name":"Administration","SortOrder":5}]
我可以根据 DepartmentID 筛选职位数组并将其分组,但我无法根据部门 ID 将部门分组到每个部门。
提示 是 selectedSectors
和 departments
变量具有 sectorId
.
请根据给定的输入帮助我实现上述给定的预期结果。非常感谢。
const selectedSectors = [{sectorName: "Sector One", sectorId: 5}, {sectorName: "Sector Two", sectorId: 24}]
const departments = [{"DepartmentID":51,"SectorID":5,"Name":"Production","SortOrder":1},{"DepartmentID":52,"SectorID":5,"Name":"Design/Engineering","SortOrder":2},{"DepartmentID":92,"SectorID":24,"Name":"Consulting","SortOrder":8},{"DepartmentID":114,"SectorID":24,"Name":"Administration","SortOrder":5}]
const jobTitles = [{"JobTitleID":167,"DepartmentID":51,"JobName":"Production Manager","Deleted":false,"SortOrder":5},{"JobTitleID":294,"DepartmentID":52,"JobName":"Senior Truss Designer","Deleted":false,"SortOrder":5},{"JobTitleID":178,"DepartmentID":51,"JobName":"Production Supervisor","Deleted":false,"SortOrder":3},{"JobTitleID":191,"DepartmentID":92,"JobName":"Saw Shop Supervisor","Deleted":false,"SortOrder":1},{"JobTitleID":461,"DepartmentID":114,"JobName":"Sawyer","Deleted":false,"SortOrder":7},{"JobTitleID":461,"DepartmentID":66,"JobName":"Sawyer","Deleted":false,"SortOrder":7},{"JobTitleID":474,"DepartmentID":92,"JobName":"Senior Truss Designer - Part Time","Deleted":false,"SortOrder":11},{"JobTitleID":449,"DepartmentID":51,"JobName":"Senior Wall Panel Designer","Deleted":false,"SortOrder":15},{"JobTitleID":278,"DepartmentID":114,"JobName":"Service Manager","Deleted":false,"SortOrder":2}]
const filteredData = selectedSectors.map(sector => {
const deps = departments.filter(dep => dep.SectorID === sector.sectorId).flatMap(department => {
const jobtitles= jobTitles.filter(
(jobTitle) => jobTitle.DepartmentID === department.DepartmentID
);
const newObj = {
deptName: department.Name,
jobtitles,
};
return newObj;
})
return {
sectorId: sector.sectorId,
sectorName: sector.sectorName,
departments: deps,
}
});
console.log('filteredData ', filteredData)
在我的简单 JS 应用程序中,我需要按顺序显示数据。
流量:
用户首先选择扇区,所以我们有基于用户选择的扇区数据,
const selectedSectors = [{sectorName: "Sector One", sectorId: 5}, {sectorName: "Sector Two", sectorId: 24}]
那么我们已经有了部门和职位的数据,我们正在通过代码获取匹配的记录,
const selectedSectors = [{sectorName: "Sector One", sectorId: 5}, {sectorName: "Sector Two", sectorId: 24}]
const departments = [{"DepartmentID":51,"SectorID":5,"Name":"Production","SortOrder":1},{"DepartmentID":52,"SectorID":5,"Name":"Design/Engineering","SortOrder":2},{"DepartmentID":92,"SectorID":24,"Name":"Consulting","SortOrder":8},{"DepartmentID":114,"SectorID":24,"Name":"Administration","SortOrder":5}]
const jobTitles = [{"JobTitleID":167,"DepartmentID":51,"JobName":"Production Manager","Deleted":false,"SortOrder":5},{"JobTitleID":294,"DepartmentID":52,"JobName":"Senior Truss Designer","Deleted":false,"SortOrder":5},{"JobTitleID":178,"DepartmentID":51,"JobName":"Production Supervisor","Deleted":false,"SortOrder":3},{"JobTitleID":191,"DepartmentID":92,"JobName":"Saw Shop Supervisor","Deleted":false,"SortOrder":1},{"JobTitleID":461,"DepartmentID":114,"JobName":"Sawyer","Deleted":false,"SortOrder":7},{"JobTitleID":461,"DepartmentID":66,"JobName":"Sawyer","Deleted":false,"SortOrder":7},{"JobTitleID":474,"DepartmentID":92,"JobName":"Senior Truss Designer - Part Time","Deleted":false,"SortOrder":11},{"JobTitleID":449,"DepartmentID":51,"JobName":"Senior Wall Panel Designer","Deleted":false,"SortOrder":15},{"JobTitleID":278,"DepartmentID":114,"JobName":"Service Manager","Deleted":false,"SortOrder":2}]
const filteredData = departments.flatMap(department => {
const jobtitles= jobTitles.filter(
(jobTitle) => jobTitle.DepartmentID === department.DepartmentID
);
const newObj = {
deptName: department.Name,
jobtitles,
};
return newObj;
})
console.log('filteredData ', filteredData)
上面的代码产生如下结果,
当前输出:
[
{
"deptName":"Production",
"jobtitles":[
{
"JobTitleID":167,
"DepartmentID":51,
"JobName":"Production Manager",
"Deleted":false,
"SortOrder":5
},
{
"JobTitleID":178,
"DepartmentID":51,
"JobName":"Production Supervisor",
"Deleted":false,
"SortOrder":3
},
{
"JobTitleID":449,
"DepartmentID":51,
"JobName":"Senior Wall Panel Designer",
"Deleted":false,
"SortOrder":15
}
]
},
{
"deptName":"Design/Engineering",
"jobtitles":[
{
"JobTitleID":294,
"DepartmentID":52,
"JobName":"Senior Truss Designer",
"Deleted":false,
"SortOrder":5
}
]
},
{
"deptName":"Consulting",
"jobtitles":[
{
"JobTitleID":191,
"DepartmentID":92,
"JobName":"Saw Shop Supervisor",
"Deleted":false,
"SortOrder":1
},
{
"JobTitleID":474,
"DepartmentID":92,
"JobName":"Senior Truss Designer - Part Time",
"Deleted":false,
"SortOrder":11
}
]
},
{
"deptName":"Administration",
"jobtitles":[
{
"JobTitleID":461,
"DepartmentID":114,
"JobName":"Sawyer",
"Deleted":false,
"SortOrder":7
},
{
"JobTitleID":278,
"DepartmentID":114,
"JobName":"Service Manager",
"Deleted":false,
"SortOrder":2
}
]
}
]
以上是基于编写的代码所期望的。并过滤departments
和jobtitles
中匹配DepartmentID
的数据。但是我错过了显示数据以及 Sectors
..
所以用户选择 Sector
基于 department
和部门的 jobtitles
必须显示。
所以我希望水平完全一样,
预期输出:
[
{
"sectorid":5,
"SectorName":"Sector One",
"departments":[
{
"deptName":"Production",
"jobtitles":[
{
"JobTitleID":167,
"DepartmentID":51,
"JobName":"Production Manager",
"Deleted":false,
"SortOrder":5
},
{
"JobTitleID":178,
"DepartmentID":51,
"JobName":"Production Supervisor",
"Deleted":false,
"SortOrder":3
},
{
"JobTitleID":449,
"DepartmentID":51,
"JobName":"Senior Wall Panel Designer",
"Deleted":false,
"SortOrder":15
}
]
},
{
"deptName":"Design/Engineering",
"jobtitles":[
{
"JobTitleID":294,
"DepartmentID":52,
"JobName":"Senior Truss Designer",
"Deleted":false,
"SortOrder":5
}
]
}
]
},
{
"sectorId":24,
"SectorName":"Sector Two",
"departments":[
{
"deptName":"Consulting",
"jobtitles":[
{
"JobTitleID":191,
"DepartmentID":92,
"JobName":"Saw Shop Supervisor",
"Deleted":false,
"SortOrder":1
},
{
"JobTitleID":474,
"DepartmentID":92,
"JobName":"Senior Truss Designer - Part Time",
"Deleted":false,
"SortOrder":11
}
]
},
{
"deptName":"Administration",
"jobtitles":[
{
"JobTitleID":461,
"DepartmentID":114,
"JobName":"Sawyer",
"Deleted":false,
"SortOrder":7
},
{
"JobTitleID":278,
"DepartmentID":114,
"JobName":"Service Manager",
"Deleted":false,
"SortOrder":2
}
]
}
]
}
]
根据上面给出的数据,很明显 sectorId: 5
有 2 个独立的部门 [Production and Design/Engineering]
而 sectorId: 24
有 2 个独立的部门 [Consulting and Administration]
..
const selectedSectors = [{sectorName: "Sector One", sectorId: 5}, {sectorName: "Sector Two", sectorId: 24}]
const departments = [{"DepartmentID":51,"SectorID":5,"Name":"Production","SortOrder":1},{"DepartmentID":52,"SectorID":5,"Name":"Design/Engineering","SortOrder":2},{"DepartmentID":92,"SectorID":24,"Name":"Consulting","SortOrder":8},{"DepartmentID":114,"SectorID":24,"Name":"Administration","SortOrder":5}]
我可以根据 DepartmentID 筛选职位数组并将其分组,但我无法根据部门 ID 将部门分组到每个部门。
提示 是 selectedSectors
和 departments
变量具有 sectorId
.
请根据给定的输入帮助我实现上述给定的预期结果。非常感谢。
const selectedSectors = [{sectorName: "Sector One", sectorId: 5}, {sectorName: "Sector Two", sectorId: 24}]
const departments = [{"DepartmentID":51,"SectorID":5,"Name":"Production","SortOrder":1},{"DepartmentID":52,"SectorID":5,"Name":"Design/Engineering","SortOrder":2},{"DepartmentID":92,"SectorID":24,"Name":"Consulting","SortOrder":8},{"DepartmentID":114,"SectorID":24,"Name":"Administration","SortOrder":5}]
const jobTitles = [{"JobTitleID":167,"DepartmentID":51,"JobName":"Production Manager","Deleted":false,"SortOrder":5},{"JobTitleID":294,"DepartmentID":52,"JobName":"Senior Truss Designer","Deleted":false,"SortOrder":5},{"JobTitleID":178,"DepartmentID":51,"JobName":"Production Supervisor","Deleted":false,"SortOrder":3},{"JobTitleID":191,"DepartmentID":92,"JobName":"Saw Shop Supervisor","Deleted":false,"SortOrder":1},{"JobTitleID":461,"DepartmentID":114,"JobName":"Sawyer","Deleted":false,"SortOrder":7},{"JobTitleID":461,"DepartmentID":66,"JobName":"Sawyer","Deleted":false,"SortOrder":7},{"JobTitleID":474,"DepartmentID":92,"JobName":"Senior Truss Designer - Part Time","Deleted":false,"SortOrder":11},{"JobTitleID":449,"DepartmentID":51,"JobName":"Senior Wall Panel Designer","Deleted":false,"SortOrder":15},{"JobTitleID":278,"DepartmentID":114,"JobName":"Service Manager","Deleted":false,"SortOrder":2}]
const filteredData = selectedSectors.map(sector => {
const deps = departments.filter(dep => dep.SectorID === sector.sectorId).flatMap(department => {
const jobtitles= jobTitles.filter(
(jobTitle) => jobTitle.DepartmentID === department.DepartmentID
);
const newObj = {
deptName: department.Name,
jobtitles,
};
return newObj;
})
return {
sectorId: sector.sectorId,
sectorName: sector.sectorName,
departments: deps,
}
});
console.log('filteredData ', filteredData)