我有这样一个集合:
const data = [
{index: 1, number: 's1', uniqId: '123', city: 'LA'},
{index: 2, number: 's2', uniqId: '321', city: 'NY'},
{index: 3, number: 's3', uniqId: '123', city: 'LA'},
{index: 4, number: 's4', uniqId: '111', city: 'TX'},
{index: 5, number: 's5', uniqId: '321', city: 'NY'}
]
我希望将其分组,以获得以下结果:
const data = [
{index: 1, numbers: ['s1', 's3'], uniqId: '123', city: 'LA'},
{index: 2, numbers: ['s2', 's5'], uniqId: '321', city: 'NY'},
{index: 3, number: 's4', uniqId: '111', city: 'TX'},
]
我有一个解决方案,但我认为可以用更简洁的方式实现。我可以只使用Ramda,但是更喜欢使用传统的解决方案。 以下是我的解决方案:
return Object.values(
data.reduce((r, e) => {
const key = `${e.uniqId}|${e.city}`;
if (!r[key]) {
r[key] = e;
if (r[key].numbers && !isEmpty(r[key].numbers)) {
r[key].numbers.push(e.number);
} else {
r[key].numbers = [];
r[key].numbers.push(e.number);
}
} else if (r[key].numbers && !isEmpty(r[key].numbers)) {
r[key].numbers.push(e.number);
} else {
r[key].numbers = [];
r[key].numbers.push(e.number);
}
return r;
}, {}),
).map((item, index) => ({ ...item, index: index }));
index
是否意味着某种排序? - igg