【发布时间】:2021-02-16 12:13:56
【问题描述】:
这可行,但我想知道是否有比使用a 和b 创建一个字符串然后拆分它更好的方法:
const data = [
{ a: 10, b: 20, c: 30, d: 40 },
{ a: 10, b: 20, c: 31, d: 41 },
{ a: 12, b: 22, c: 32, d: 42 }
];
d3.rollups(
data,
x => ({
c: x.map(d => d.c),
d: x.map(d => d.d)
}),
d => `${d.a} ${d.b}`
)
.map(([key, values]) => {
const [a, b] = key.split(' ');
return {a, b, ...values};
});
// OUTPUT
// [
// {a: "10", b: "20", c: [30, 31], d: [40, 41]},
// {a: "12", b: "22", c: [32], d: [42]}
// ]
【问题讨论】:
-
好问题!起初看起来很简单,结果却很棘手。我怀疑是否有更好的方法来使用像您的方法这样的组合键。你可以做一个嵌套汇总,但你必须循环遍历结果数组以将它们展平为所需的输出。
-
"Grouping objects in an array by multiple keys" 的边界副本。尽管考虑到答案的质量,我们最好关闭该问题作为该问题的副本。此外,使用“javascript group of objects by multiple keys”之类的方法访问 Google 会产生大量可能的方法,包括 D3 和 VanillaJS。
-
此外,您可能会对我在 Robin 的回答中作为 comment 的一部分发布的性能结果感兴趣。
标签: javascript d3.js