Вы на правильном пути, но упускаете некоторые ключевые функции:
Посмотрите комментарии в этом фрагменте!
Основная проблема заключается в том, что вы назначаете объект от angelinajolie
до bradpitt
до определения объекта angelinejolie
. Более простой и безопасный способ сделать это с id's
, потому что имена не уникальны. Я использовал это в своем примере:
Также со свойствами вы используете for...in
l oop, и вам нужно проверить, доступно ли свойство. Если u.parents
равно undefined
, будет выдано сообщение об ошибке.
Я изменил уникальные имена на идентификаторы, которые строятся со строкой id
и шестизначными числами. id00000
. В объекте users я просто ссылаюсь на пользователя без начальных нулей и id. Чтобы восстановить это в функции getParents
, я использовал String.prototype.padStart
. Ноль слева от строки дополняется до 6 символов.
"id"+(p.toString().padStart(6, '0'));
const users = {
id000001 : {
name: "Brad",
lastname: "Pitt",
spouses: [
1
]
},
id000002 : {
name: "Angelina",
lastname: "Jolie",
parents: [
3
]
}, //fixed a missing comma here
id000003: {
name: "Jon"
}
}
function getParents() {
//define a return object
//return parents per set of users
const parents = {};
//iterate over every user
for (key in users) {
const u = users[key];
//if the user has parents go on
if (u.parents)
{
//save the parents to parent object with the user as key:
//use map to iterate over every parent and return the name of the parent
parents[key] = u.parents.map((p) => users["id"+(p.toString().padStart(6, '0'))].name);
}
};
//return the parents object
return parents;
}
//log to console to show results:
console.log(getParents());