首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个对象构造父子关系对象

如何从另一个对象构造父子关系对象
EN

Stack Overflow用户
提问于 2021-08-05 10:59:51
回答 2查看 51关注 0票数 0

对于一个显示父子关系的给定对象,我想构造另一个类似于期望输出的对象。

代码语言:javascript
复制
const PARENT_CHILD = {
  'Newton': ['Plato', 'Aristotle'],
  'Aristotle': ['Einstein'],
  'Plato': ['Tesla', 'Edison'],
  'Edison': ['Hawking']
};

得到的返回对象应该类似于下面的对象,

代码语言:javascript
复制
{
  "Newton": {
    "son": "Plato, Aristotle"
  },
  "Plato": {
    "father": "Newton",
    "son": "Tesla, Edison"
  },
  "Aristotle": {
    "father": "Newton",
    "son": "Einstein"
  },
  "Einstein": {
    "father": "Aristotle",
    "son": "Hawking"
  },
  "Tesla": {
    "father": "Plato"
  },
  "Edison": {
    "father": "Plato"
  },
  "Hawking": {
    "father": "Einstein"
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-05 11:19:24

我们可以结合使用Object.entries(PARENT_CHILD).map().flat()来创建一个包含所有相关名称的数组。然后,我们从这些数据创建一个集合,以确保它们是唯一的。

一旦完成,我们就可以创建我们的新对象,使用.reduce(),如果实体有'sons‘,则添加一个son属性,如果实体也有’‘,则添加’Object‘:

代码语言:javascript
复制
const PARENT_CHILD = {
  'Newton': ['Plato', 'Aristotle'],
  'Aristotle': ['Einstein'],
  'Plato': ['Tesla', 'Edison'],
  'Edison': ['Hawking']
};

// Get unique names of all entities...
const uniqueNames = [...new Set(Object.entries(PARENT_CHILD).map(([k,v]) => [k, ...v]).flat())];

const result = uniqueNames.reduce((acc,key) => {
    acc[key] = {};
    if (PARENT_CHILD[key]) {
        acc[key].son = PARENT_CHILD[key].join(", ");
    }
    const res = Object.entries(PARENT_CHILD).find(([k,v]) => v.includes(key));
    if (res?.[0]) {
        acc[key].father = res[0];
    }
    return acc;
}, {})

console.log('Result:', result)

票数 1
EN

Stack Overflow用户

发布于 2021-08-05 11:32:15

尝尝这个

代码语言:javascript
复制
const PARENT_CHILD = {
  'Newton': ['Plato', 'Aristotle'],
  'Aristotle': ['Einstein'],
  'Plato': ['Tesla', 'Edison'],
  'Edison': ['Hawking']
};


let object={};
Object.entries(PARENT_CHILD).forEach(([key, value]) => {
  object[key]={...object[key],'son':value.toString()};
  
  value.map(ele=>{
  object[ele]={...object[ele],'father':key}
  
  });
});

console.log(object);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68665317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档