本文介绍一种利用循环和数组方法扁平化深嵌套对象的JavaScript方法,该方法是针对每日JavaScript挑战#js-31的解决方案。
核心方法:
代码实现:
function flatten(obj) { let flattenedObj = {}; // 初始化空对象用于存储扁平化后的键值对 // 遍历键值对 for (const key in obj) { // 如果键指向的对象不是数组,则递归扁平化该对象 if (typeof obj[key] === "object" && !Array.isArray(obj[key])) { const tempObj = flatten(obj[key]); for (const tempKey in tempObj) { flattenedObj[`${key}.${tempKey}`] = tempObj[tempKey]; } // 如果键指向数组,则递归扁平化数组中存在的任何对象 } else if (Array.isArray(obj[key])) { if (obj[key].some(e => typeof e === "object")) { flattenedObj[key] = obj[key].map((element) => typeof element === "object" ? flatten(element) : element); } else { flattenedObj[key] = obj[key]; } } else { flattenedObj[key] = obj[key]; } } return flattenedObj; }
测试用例:
以下是一些测试对象,包括深层嵌套的对象和包含不同数据类型的数组。上述方法均可处理这些对象。
const obj = { firstName: "Heath", lastName: "Frederick", occupation: { name: "Software Engineer", duties: ["automation testing", "bug fixes", "deployments"], workAddress: { street: "Las Colinas Ave", city: "Irving", state: "Texas" } } }; const arrOfObj = [ { label: "first", id: 1, children: [] }, { label: "second", id: 2, children: [ { label: "third", id: 3, children: [ { label: "fifth", id: 5, children: [] }, { label: "sixth", id: 6, children: [ { label: "seventh", id: 7, children: [] } ] } ] }, { label: "fourth", id: 4, children: [] }, 1, "different Type", true ] } ];
您可以自行尝试以上代码和测试对象,体验其扁平化深嵌套对象的强大功能。
以上就是扁平的深嵌套物体的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号