Javascript 将对象键和值映射到另一个对象

Javascript 将对象键和值映射到另一个对象,javascript,object,mapping,Javascript,Object,Mapping,如何实现从一个对象键到另一个具有该特定键的属性的对象的映射函数,从而保留对象结构 例如,给定此输入对象: { person: { first_name: "fn", last_name: "ln", address: { city: "c", street: "s", }, movies: [ { titl

如何实现从一个对象键到另一个具有该特定键的属性的对象的映射函数,从而保留对象结构

例如,给定此输入对象:

{
    person: {
        first_name: "fn",
        last_name: "ln",
        address: {
            city: "c",
            street: "s",
        },
        movies: [
            {
                title: "movie1"
            },
            {
                title: "movie2"
            }
        ]
    }
}
结果应该是:

{
    name: "person",
    children: [
        {
            name: "first_name"
        },
        {
            name: "last_name"
        },
        {
            name: "address",
            children: [
                {
                    name: "city"                  
                },
                {
                    name: "street"                  
                }
            ]
        },
        {
            name: "movies",
            children: [
                {
                    name: "title"
                }
            ]
        }
    ]
}

我尝试过一些递归对象遍历,但是实现起来非常糟糕。我觉得有一种更简单的方法来处理它

您可以使用递归来处理它。创建一个以条目作为输入的函数。Entry是一个包含两个元素的数组,其中包含对象的键值对<代码>[键,值]

const obj={人:{名字:“fn”,姓氏:“ln”,地址:{城市:“c”,街道:“s”},电影:[{片名:“电影1”},{片名:“电影2”}]}
函数getKeys(条目){
设obj={
名称:条目[0],
儿童:[]
}
常量{children}=obj
设val=entry[1]
for(让k输入val){
if(Array.isArray(val[k])){
push(getKeys([k,val[k][1]]);
}
else if(类型值[k]=“对象”){
children.push(getKeys([k,val[k]]))
}
else子项。push({name:k})
}
如果(!obj.childrent.length)删除obj.children;
返回obj
}

console.log(getKeys(Object.entries(obj)[0]))
您能展示一下您的尝试吗?是的,我一到工作站怎么办?如果有另一个键带有
person
?不会有。但如果是,它应该覆盖first@Fraction不会有,数据已经被清理并正确格式化。输入结构不变