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

标签 javascript object mapping

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

例如,给定这个输入对象:

{
    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"
                }
            ]
        }
    ]
}

我尝试过一些递归对象遍历,但实现起来真的很丑陋。我觉得有更简单的方法来处理它

最佳答案

您可以使用递归来做到这一点。创建一个将条目作为输入的函数。条目是两个元素的数组,其中包含对象的键值对。 [键,值]

const obj = { person: { first_name: "fn", last_name: "ln", address: { city: "c", street: "s", }, movies: [ { title: "movie1" }, { title: "movie2" } ] } }

function getKeys(entry){
  let obj = {
    name:entry[0],
    children:[]
  }
  const { children } = obj
  let val = entry[1]
  for(let k in val){
    if(Array.isArray(val[k])){
      children.push(getKeys([k,val[k][1]]));
    }
    else if(typeof val[k] === "object"){
      children.push(getKeys([k,val[k]]))
    }
    else children.push({name:k})
  }
  if(!obj.children.length) delete obj.children;
  return obj
}
console.log(getKeys(Object.entries(obj)[0]))

关于javascript - 将对象键和值映射到另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56378866/

相关文章:

javascript - 等待图像完全加载后再显示在页面上?

javascript - 禁用拖放所选文本

javascript - 从对象调用方法作为事件监听器

java - 如何将用户的输入与对象的属性进行比较并获取该对象?

c# - Entity Framework - LINQ 表达式映射多对多

javascript - 关于方程和条件的简单 Html/JavaScript 问题

PowerShell 递归对象属性

iphone - PDF 到 Unicode CMap 字形映射

java - 在表之间链接@ManyToOne 时如何创建对象

php - 我将如何检索不同页面上的数据?