La documentación d3.group dice:
d3.group(iterable, ...keys)
Por ejemplo, si tengo lo siguiente:
data = [
{name: "jim", amount: "34.0", date: "11/12/2015"},
{name: "carl", amount: "120.11", date: "11/12/2015"},
{name: "stacy", amount: "12.01", date: "01/04/2016"},
{name: "stacy", amount: "34.05", date: "01/04/2016"}
]
Pero en lugar de:
d3.group(data, d => d.name, d => d.date)
Quiero hacer algo como:
d3.group(data, ['name', 'date'])
¿Cómo debería hacerlo? La razón es que es posible que no sepa las claves de antemano y tendré que agrupar mediante programación.
¡Gracias!
...keys pueden ser un map que devuelve una función, por ejemplo, ...keys.map(k => d => d[k]) .
Vea a continuación: esto usa groups en lugar de group , ya que se puede leer en la salida de la consola, pero esto también funciona para group .
const data = [
{name: "jim", amount: "34.0", date: "11/12/2015"},
{name: "carl", amount: "120.11", date: "11/12/2015"},
{name: "stacy", amount: "12.01", date: "01/04/2016"},
{name: "stacy", amount: "34.05", date: "01/04/2016"}
];
const keys = ["name", "date"];
const grps = d3.groups(
data,
...keys.map(k => d => d[k])
);
console.log(grps);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.6.1/d3.min.js"></script>