Created
October 9, 2017 20:52
-
-
Save alanrsoares/ed639416efe4d7f6ea8f2a4f6b2a449b to your computer and use it in GitHub Desktop.
JS Bin grouping dynamically generated datasets // source http://jsbin.com/netulis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta name="description" content="grouping dynamically generated datasets"> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width"> | |
<title>JS Bin</title> | |
</head> | |
<body> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script> | |
<script id="jsbin-javascript"> | |
// data generator | |
'use strict'; | |
var randomInt = function randomInt(min, max) { | |
return Math.floor(Math.random() * (max - min + 1)) + min; | |
}; | |
var oneOf = function oneOf(xs) { | |
return xs[randomInt(0, xs.length - 1)]; | |
}; | |
var names = ['John', 'Arya', 'Theon', 'Jamie', 'Daenerys']; | |
var surnames = ['Snow', 'Stark', 'Greyjoy', 'Lanister', 'Targaryen']; | |
var allegiances = ['Targaryen-Stark', 'Lanister', 'Brotherhood with no banners']; | |
var personGnererator = function personGnererator(i) { | |
return { | |
id: 'person-' + i, | |
age: randomInt(20, 30), | |
name: oneOf(names) + ' ' + oneOf(surnames), | |
gender: oneOf(['M', 'F', 'N/A']), | |
allegiance: oneOf(allegiances) | |
}; | |
}; | |
var generate = function generate(n) { | |
return function (f) { | |
return R.range(0, n).map(f); | |
}; | |
}; | |
// :: sortBy = (a -> String) -> [a] -> [a] | |
var sortBy = function sortBy(fn) { | |
return function (xs) { | |
return []; | |
}; | |
}; | |
// :: groupBy = (a -> String) -> (a -> b) -> [a] -> { String: [b] } | |
var groupBy = function groupBy(groupFn) { | |
return function (idFn) { | |
return function (xs) { | |
return R.map(function (xs) { | |
return xs.map(idFn); | |
}, R.groupBy(groupFn, xs)); | |
}; | |
}; | |
}; | |
// data test | |
var LS_KEY = 'person-list'; | |
var fromLS = JSON.parse(localStorage.getItem(LS_KEY)); | |
var list = fromLS || (function () { | |
var _list = generate(100)(personGnererator).map(function (x) { | |
return R.assoc('birthDay', new Date(2017 - x.age, randomInt(0, 11), randomInt(0, 29)), x); | |
}); | |
localStorage.setItem(LS_KEY, JSON.stringify(_list)); | |
return _list; | |
})(); | |
var data = R.indexBy(function (x) { | |
return x.id; | |
}, list); | |
var sortedList = R.sortBy(function (x) { | |
return x.age; | |
}, list); | |
var groups = groupBy(function (x) { | |
return x.age; | |
})(function (x) { | |
return x.id; | |
})(sortedList); | |
console.log(groups); | |
</script> | |
<script id="jsbin-source-javascript" type="text/javascript">// data generator | |
const randomInt = (min, max) => | |
Math.floor(Math.random() * (max - min + 1)) + min | |
const oneOf = xs => xs[randomInt(0, xs.length - 1)] | |
const names = ['John', 'Arya', 'Theon', 'Jamie', 'Daenerys'] | |
const surnames = ['Snow', 'Stark', 'Greyjoy', 'Lanister', 'Targaryen'] | |
const allegiances = [ | |
'Targaryen-Stark', | |
'Lanister', | |
'Brotherhood with no banners' | |
] | |
const personGnererator = i => ({ | |
id: `person-${i}`, | |
age: randomInt(20, 30), | |
name: `${oneOf(names)} ${oneOf(surnames)}`, | |
gender: oneOf(['M', 'F', 'N/A']), | |
allegiance: oneOf(allegiances) | |
}) | |
const generate = n => f => R.range(0, n).map(f) | |
// :: sortBy = (a -> String) -> [a] -> [a] | |
const sortBy = fn => xs => [] | |
// :: groupBy = (a -> String) -> (a -> b) -> [a] -> { String: [b] } | |
const groupBy = groupFn => idFn => xs => | |
R.map(xs => xs.map(idFn), R.groupBy(groupFn, xs)) | |
// data test | |
const LS_KEY = 'person-list' | |
const fromLS = JSON.parse(localStorage.getItem(LS_KEY)) | |
const list = fromLS || (() => { | |
const _list = generate(100)(personGnererator) | |
.map(x => R.assoc( | |
'birthDay', | |
new Date(2017 - x.age, randomInt(0, 11), randomInt(0, 29)), | |
x | |
)) | |
localStorage.setItem(LS_KEY, JSON.stringify(_list)) | |
return _list | |
})() | |
const data = R.indexBy(x => x.id, list) | |
const sortedList = R.sortBy(x => x.age, list) | |
const groups = groupBy(x => x.age)(x => x.id)(sortedList) | |
console.log(groups) | |
</script></body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// data generator | |
'use strict'; | |
var randomInt = function randomInt(min, max) { | |
return Math.floor(Math.random() * (max - min + 1)) + min; | |
}; | |
var oneOf = function oneOf(xs) { | |
return xs[randomInt(0, xs.length - 1)]; | |
}; | |
var names = ['John', 'Arya', 'Theon', 'Jamie', 'Daenerys']; | |
var surnames = ['Snow', 'Stark', 'Greyjoy', 'Lanister', 'Targaryen']; | |
var allegiances = ['Targaryen-Stark', 'Lanister', 'Brotherhood with no banners']; | |
var personGnererator = function personGnererator(i) { | |
return { | |
id: 'person-' + i, | |
age: randomInt(20, 30), | |
name: oneOf(names) + ' ' + oneOf(surnames), | |
gender: oneOf(['M', 'F', 'N/A']), | |
allegiance: oneOf(allegiances) | |
}; | |
}; | |
var generate = function generate(n) { | |
return function (f) { | |
return R.range(0, n).map(f); | |
}; | |
}; | |
// :: sortBy = (a -> String) -> [a] -> [a] | |
var sortBy = function sortBy(fn) { | |
return function (xs) { | |
return []; | |
}; | |
}; | |
// :: groupBy = (a -> String) -> (a -> b) -> [a] -> { String: [b] } | |
var groupBy = function groupBy(groupFn) { | |
return function (idFn) { | |
return function (xs) { | |
return R.map(function (xs) { | |
return xs.map(idFn); | |
}, R.groupBy(groupFn, xs)); | |
}; | |
}; | |
}; | |
// data test | |
var LS_KEY = 'person-list'; | |
var fromLS = JSON.parse(localStorage.getItem(LS_KEY)); | |
var list = fromLS || (function () { | |
var _list = generate(100)(personGnererator).map(function (x) { | |
return R.assoc('birthDay', new Date(2017 - x.age, randomInt(0, 11), randomInt(0, 29)), x); | |
}); | |
localStorage.setItem(LS_KEY, JSON.stringify(_list)); | |
return _list; | |
})(); | |
var data = R.indexBy(function (x) { | |
return x.id; | |
}, list); | |
var sortedList = R.sortBy(function (x) { | |
return x.age; | |
}, list); | |
var groups = groupBy(function (x) { | |
return x.age; | |
})(function (x) { | |
return x.id; | |
})(sortedList); | |
console.log(groups); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment