
在处理复杂数据时,首先要清晰地理解其原始结构。我们面对的数据是一个数组,其中包含一个或多个对象。每个对象又以学期名称(如"semester one")作为键,其值是一个包含学生信息的对象数组。
原始数据示例:
[
{
"Semester One": [
{ id: "1", name: "Name1" },
{ id: "2", name: "Name2" }
],
"Semester Two": [
{ id: "3", name: "Name3" },
{ id: "4", name: "Name4" }
]
}
]这种结构在某些场景下可能便于组织,但在需要对所有学生进行统一处理时,其嵌套性会带来不便。
我们的目标是将上述复杂结构转换为一个扁平化的数组,其中每个元素都是一个学生对象,并且新增一个semester属性来标识其所属的学期。
目标数据示例:
立即学习“Java免费学习笔记(深入)”;
[
{ id: "1", name: "Name1", semester: "Semester One" },
{ id: "2", name: "Name2", semester: "Semester One" },
{ id: "3", name: "Name3", semester: "Semester Two" },
{ id: "4", name: "Name4", semester: "Semester Two" }
]要实现这一转换,我们需要多层遍历:首先遍历最外层的数组,然后遍历每个学期对象中的键(即学期名称),最后遍历每个学期对应的学生数组。
以下是实现这一目标的核心JavaScript代码:
const originalArray = [
{
"Semester One": [
{ id: "1", name: "Name1" },
{ id: "2", name: "Name2" }
],
"Semester Two": [
{ id: "3", name: "Name3" },
{ id: "4", name: "Name4" }
]
}
];
const newArray = [];
originalArray.forEach((item) => {
// 遍历当前对象的所有键(即学期名称,如 "Semester One")
Object.keys(item).forEach((key) => {
// 对于每个学期键,获取其对应的学生数组
item[key].forEach((studentObj) => {
// 将学生对象展开,并添加新的 'semester' 属性
newArray.push({
...studentObj, // 使用展开运算符复制现有属性
semester: key, // 将学期名称作为新属性的值
});
});
});
});
console.log(newArray);
/*
输出:
[
{ id: '1', name: 'Name1', semester: 'Semester One' },
{ id: '2', name: 'Name2', semester: 'Semester One' },
{ id: '3', name: 'Name3', semester: 'Semester Two' },
{ id: '4', name: 'Name4', semester: 'Semester Two' }
]
*/通过本教程,我们学习了如何利用JavaScript的数组和对象方法,将一个嵌套复杂的对象数组扁平化。关键在于层层遍历,并巧妙地利用Object.keys()提取父级键作为子级的新属性。这种转换能力在数据处理、API响应处理以及前端状态管理中都非常实用,能够帮助我们更高效、更灵活地使用数据。掌握这种数据转换技巧,将极大地提升你在JavaScript开发中的数据处理能力。
以上就是JavaScript中扁平化嵌套对象数组并提取键作为新属性的教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号