Javascript 指定对象索引在对象内部可用

Javascript 指定对象索引在对象内部可用,javascript,object,Javascript,Object,我有一个目标: var contacts = { 'KxN5RVjE1zoGqrzYKOV' : {email: "dfdfdf@dfdfd.com", firstName: "Lora", lastName: "Did"}, '-KxN7AkNyiVjMYReZzbQ': {email: "teste@test.com", firstName: "Tom", lastName: "Smith"}, '-KxN743hpoTVWIqR75XD': {emai

我有一个目标:

    var contacts = 
{
  'KxN5RVjE1zoGqrzYKOV' :
  {email: "dfdfdf@dfdfd.com", firstName: "Lora", lastName: "Did"},

  '-KxN7AkNyiVjMYReZzbQ':
  {email: "teste@test.com", firstName: "Tom", lastName: "Smith"},

  '-KxN743hpoTVWIqR75XD':
  {email: "user@test.com", firstName: "Polina", lastName: "Polina"}

};
我需要使它成为一个值的关键,因此它将如下所示:

var contacts = 
{
  'KxN5RVjE1zoGqrzYKOV' :
  {email: "dfdfdf@dfdfd.com", firstName: "Lora", lastName: "Did", id:'KxN5RVjE1zoGqrzYKOV'},

  '-KxN7AkNyiVjMYReZzbQ':
  {email: "user@test.com", firstName: "Tom", lastName: "Smith", id: '-KxN7AkNyiVjMYReZzbQ'},

  '-KxN743hpoTVWIqR75XD':
  {email: "user@test.com", 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);
});

有什么想法我遗漏了什么,还有什么我可以尝试的吗?

如果您不介意修改原始对象,您可以使用forEach循环键并向每个元素添加id:

var触点= { “KxN5RVjE1zoGqrzYKOV”: {电子邮件:dfdfdf@dfdfd.com,姓:劳拉,姓:迪德}, “-kxn7aknyivjmyrezbq”: {电子邮件:teste@test.com,姓:汤姆,姓:史密斯}, “-KxN743hpoTVWIqR75XD”: {电子邮件:user@test.com,姓:波琳娜,姓:波琳娜} }; Object.keyscontacts.forEachkey=>{ 联系人[键]['id']=键; };
控制台.logcontacts 如果不介意修改原始对象,只需使用forEach循环键并向每个元素添加id即可:

var触点= { “KxN5RVjE1zoGqrzYKOV”: {电子邮件:dfdfdf@dfdfd.com,姓:劳拉,姓:迪德}, “-kxn7aknyivjmyrezbq”: {电子邮件:teste@test.com,姓:汤姆,姓:史密斯}, “-KxN743hpoTVWIqR75XD”: {电子邮件:user@test.com,姓:波琳娜,姓:波琳娜} }; Object.keyscontacts.forEachkey=>{ 联系人[键]['id']=键; };
控制台.logcontacts 如果要创建新对象而不是修改,可以尝试-


如果要创建新对象而不是修改,可以尝试-


除了给出的好答案,你的解决方案也会奏效。您只需返回Object.assign。。。。映射将输入映射到输出。您没有返回任何内容,因此每个键都隐式返回未定义的内容。这就是为什么你的解决方案给出了[undefined,undefined,undefined]除了给出的好答案,你的解决方案也会起作用。您只需返回Object.assign。。。。映射将输入映射到输出。您没有返回任何内容,因此每个键都隐式返回未定义的内容。这就是为什么您的解决方案给出了[undefined,undefined,undefined]
var results = Object
    .keys(contacts)
    .reduce((newObj, key) => Object.assign(
        newObj, 
        {[key]: Object.assign({id: key}, contacts[key])}
    ), {})