Назначение индекса объекта доступным внутри объекта

1

У меня есть объект:

    var contacts = 
{
  'KxN5RVjE1zoGqrzYKOV' :
  {email: "[email protected]", firstName: "Lora", lastName: "Did"},

  '-KxN7AkNyiVjMYReZzbQ':
  {email: "[email protected]", firstName: "Tom", lastName: "Smith"},

  '-KxN743hpoTVWIqR75XD':
  {email: "[email protected]", firstName: "Polina", lastName: "Polina"}

};

Мне нужно сделать ключ ключом к ценности, поэтому он будет выглядеть так:

var contacts = 
{
  'KxN5RVjE1zoGqrzYKOV' :
  {email: "[email protected]", firstName: "Lora", lastName: "Did", id:'KxN5RVjE1zoGqrzYKOV'},

  '-KxN7AkNyiVjMYReZzbQ':
  {email: "[email protected]", firstName: "Tom", lastName: "Smith", id: '-KxN7AkNyiVjMYReZzbQ'},

  '-KxN743hpoTVWIqR75XD':
  {email: "[email protected]", firstName: "Polina", lastName: "Polina", id:'-KxN743hpoTVWIqR75XD'}

};

Это код, который у меня есть до сих пор, который ничего не добавляет, просто консоль того же старого объекта:

var results = Object.keys(contacts).map((key, id) => {
  var contact = contacts[key];
  Object.assign({}, contact, {id: key});
  console.log(contact);
});

Любые мысли, чего я не хватает, и что еще я могу попробовать?

  • 0
    Помимо хороших ответов, ваше решение сработало бы тоже. Вы просто должны были return Object.assign(...) . map отображает входные и выходные данные. Вы не вернули ничего, так что undefined был возвращен неявно для каждого ключа. Вот почему ваше решение дало [undefined,undefined,undefined]
Теги:
object

2 ответа

1
Лучший ответ

Если вы хотите создать новый объект, а не его модификацию, попробуйте reduce -

var results = Object
    .keys(contacts)
    .reduce((newObj, key) => Object.assign(
        newObj, 
        {[key]: Object.assign({id: key}, contacts[key])}
    ), {})
  • 0
    благодарю вас! Мне очень нравится ваше решение!
3

Если вы не возражаете, чтобы изменить исходный объект, вы можете просто использовать цикл forEach через ключи и добавить id к каждому элементу:

var contacts = 
{
  'KxN5RVjE1zoGqrzYKOV' :
  {email: "[email protected]", firstName: "Lora", lastName: "Did"},

  '-KxN7AkNyiVjMYReZzbQ':
  {email: "[email protected]", firstName: "Tom", lastName: "Smith"},

  '-KxN743hpoTVWIqR75XD':
  {email: "[email protected]", firstName: "Polina", lastName: "Polina"}

};

Object.keys(contacts).forEach(key => {
  contacts[key]['id'] = key;
});

console.log(contacts);
  • 0
    О боже, ты так быстро решил это !!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню