Вы можете использовать Object.values
, чтобы получить значения вашего объекта в виде массива.Ключи от вашего стола, кажется, не имеют смысла;они просто индексы.Это значения, которые вы хотите сгруппировать: использование Object.values
проясняет это.
Получив массив, вы можете использовать Array.prototype.reduce
.Я завернул groupBy
в многократно используемую функцию, которая использует reduce
внутри.
const table = { 0: { firstName: 'Mark', lastName: 'Spencer', address: { Country: 'England', Town: 'London', Street: 'Old street', Postcode: 'W2 1RB' } }, 1: { firstName: 'Franz', lastName: 'Muller', address: { Country: 'Germany', Town: 'Berlin', Street: 'Wilhelmstrasse', Postcode: '10115 - 14199' } }, 2: { firstName: 'William', lastName: 'Davies', address: { Country: 'England', Town: 'Liverpool', Street: 'New Street', Postcode: 'l1 0au' } } };
const groupBy = (getId, array) =>
array.reduce(
(groups, x) => {
const k = getId(x);
if (!groups[k]) groups[k] = [];
groups[k].push(x);
return groups;
},
{}
);
console.log(
groupBy(
person => person.address.Country,
Object.values(table)
)
)