扁平的深嵌套物体

扁平的深嵌套物体

本文介绍一种利用循环和数组方法扁平化深嵌套对象的JavaScript方法,该方法是针对每日JavaScript挑战#js-31的解决方案。

核心方法:

循环遍历对象: 使用for...in循环遍历普通JavaScript对象(POJO)的键值对for循环则用于遍历数组元素。递归: flatten函数自身调用自身,实现对任意深层嵌套对象的扁平化处理,无论其是作为键值还是数组元素存在。类型判断: 使用typeof运算符判断嵌套对象的类型。数组方法: 使用map()some()数组方法。 map()方法较为常见,some()方法则接受一个回调函数,返回布尔值。如果数组中任何一个元素满足条件,则返回trueevery()方法与some()类似,但只有当所有元素都满足条件时才返回true

代码实现:

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        ]    }];

您可以自行尝试以上代码和测试对象,体验其扁平化深嵌套对象的强大功能。

以上就是扁平的深嵌套物体的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1501201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 23:21:38
下一篇 2025年12月19日 23:21:53

相关推荐

发表回复

登录后才能评论
关注微信