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 f6426792d3
commit 5a0d076a81

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']}
```