Skip to content

Extend _.groupBy to support multi-key objects #216

Description

@rianwouters

The current groupBy function only adds each Collection object to the returned hash only once.
In some case one might want to add the same object in multiple groups.

A concrete example is an object having an array property.

Basically this means replacing:

.groupBy = group(function(result, value, key) {
if (
.has(result, key)) result[key].push(value); else result[key] = [value];
});

by

function addToGroup(result, value, key) {
if _.isArray(key) { .each(key, function(k) { addToGroup(result, value, k); }); return; }
if (
.has(result, key)) result[key].push(value); else result[key] = [value];
});

_.groupBy = group(addToGroup);

I implemented this for my backbone collection as groupByMulti but that is rather cumbersome as I don't have access to the underscore internals, in particular the group function.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    after modulesThis should be postponed until after modularization (temporary label, see #220)enhancement

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions