将对象数组转换为对象

Convert Array of Object to Object

我有一个如下所示的数组:

tab [
    0: {
        firstName: John,
        lastName: Doe,            
        situation: married,
        familyMembers: 5,
    }
    1: {
        firstName: Jack,
        lastName: Daniel,
        situation: single,
        familyMembers: 6,
    }
]

我需要这样的东西:

{
    [John]: {[Doe]: 5,
    [Jack]: {[Daniel]: 6,
}

我试过这样的事情:

tab.map((item) => {
    return (
        {[item.firstName]: {[item.lastName]: item.familyMembers}}
    )
})

但即使不考虑我有一个数组而不是一个对象,结果也是这样的:

[
    0: {
        [John]: {[Doe]: 5,
    }
    1: {
        [Jack]: {[Daniel]: 6,
    }
]

如有任何建议我将不胜感激

map() 总是 returns 函数结果的数组。

您可以改用reduce()

var tab = [{
    firstName: 'John',
    lastName: 'Doe',
    situation: 'maried',
    familyMembers: 5,
  },
  {
    firstName: 'Jack',
    lastName: 'Daniel',
    situation: 'single',
    familyMembers: 6,
  }
];
var result = tab.reduce((obj, item) => {
  obj[item.firstName] = {
    [item.lastName]: item.familyMembers
  };
  return obj;
}, {});
console.log(result);

假设您希望名称作为键,您可以构建条目并从中构建对象。

var tab = [{ firstName: 'John', lastName: 'Doe', situation: 'maried', familyMembers: 5 }, { firstName: 'Jack', lastName: 'Daniel', situation: 'single', familyMembers: 6 }],
    result = Object.fromEntries(tab.map(({ firstName, lastName, familyMembers }) =>
        [firstName, { [lastName]: familyMembers }]
    ));

console.log(result);