Как мне связать внутри объекта / массива? - PullRequest
1 голос
/ 05 января 2020

Я хочу связать пользователей с их родителями / детьми / супругами в одном и том же. js file

Итак, как мне 'связать' внутри объекта. Допустим, скажем:

const users = {
  bradpitt: {
    name: "Brad",
    lastname: "Pitt",
    spouses: [{
      angelinajolie
    }]
  },
  angelinajolie: {
    name: "Angelina",
    lastname: "Jolie",
    parents: [{
      jonvoight
    }]
  }
  jonvoight: {
    name: "Jon"
  }
}

Так что я могу использовать это так:

getParents() {
  for (const u of users) {
    return u.parents.name
  }
}

Результат: Джон

1 Ответ

1 голос
/ 05 января 2020

Вы на правильном пути, но упускаете некоторые ключевые функции:

Посмотрите комментарии в этом фрагменте!

Основная проблема заключается в том, что вы назначаете объект от 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...