I've found a lot of solutions for a static structure, but nothing for a dynamic one. Here's the simple use case...
let nested = deepNest(array, ["criteria1", "criteria2", ...])
Here's the desired outcome...
deepNest(people, ["gender", "color"]);
// result
{
male: {
blue: {
0: {name: "Jim", color: "blue", gender: "male"},
1: {name: "Sam", color: "blue", gender: "male"}
},
green: {
0: {name: "Eddie", color: "green", gender: "male"}
}
},
female: {
blue: {
0: {name: "Eva", color: "blue", gender: "female"},
},
green: {
0: {name: "Susan", color: "green", gender: "female"}
}
}
}
...based on this data.
const people = [
{
name: "Jim",
color: "blue",
gender: "male"
},
{
name: "Susan",
color: "green",
gender: "female"
},
{
name: "Sam",
color: "blue",
gender: "male"
},
{
name: "Eddie",
color: "green",
gender: "male"
},
{
name: "Eva",
color: "blue",
gender: "female"
}
];
Keep in mind that the grouping has to be dynamic i.e. the array can be nested like deepNest(people, ["gender"])
or deepNest(people, ["color", "gender", "name"])