对于一个显示父子关系的给定对象,我想构造另一个类似于期望输出的对象。
const PARENT_CHILD = {
'Newton': ['Plato', 'Aristotle'],
'Aristotle': ['Einstein'],
'Plato': ['Tesla', 'Edison'],
'Edison': ['Hawking']
};得到的返回对象应该类似于下面的对象,
{
"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"
}
}发布于 2021-08-05 11:19:24
我们可以结合使用Object.entries(PARENT_CHILD)、.map()和.flat()来创建一个包含所有相关名称的数组。然后,我们从这些数据创建一个集合,以确保它们是唯一的。
一旦完成,我们就可以创建我们的新对象,使用.reduce(),如果实体有'sons‘,则添加一个son属性,如果实体也有’‘,则添加’Object‘:
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)
发布于 2021-08-05 11:32:15
尝尝这个
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);
https://stackoverflow.com/questions/68665317
复制相似问题