Tried to reproduce the groupBy behaviour from the lodash lib.
https://lodash.com/docs/4.17.4#groupBy
This commit is contained in:
Elder Henrique Souza
2017-12-13 18:49:12 -02:00
committed by GitHub
parent 2674273efc
commit e8d9acae9a

16
snippets/group-by Normal file
View File

@ -0,0 +1,16 @@
### Group by
Passing an array of values, a function or a property name thats going to be run against each value in the array,
returns an object where the keys are the mapped results and the values is an array of the original values that generated the same results.
```js
const groupBy = (values, fn) => {
return (typeof fn === 'function' ? values.map(fn) : values.map((val) => val[fn]))
.reduce((acc, val, i) => {
acc[val] = acc[val] === undefined ? [values[i]] : acc[val].concat(values[i]);
return acc;
}, {});
}
// groupBy([6.1, 4.2, 6.3], Math.floor) -> {4: [4.2], 6: [6.1, 6.3]}
// groupBy(['one', 'two', 'three'], 'length') -> {3: ['one', 'two'], 5: ['three']}
```