Skip to content

Instantly share code, notes, and snippets.

@alanrsoares
Created October 9, 2017 20:52
Show Gist options
  • Save alanrsoares/ed639416efe4d7f6ea8f2a4f6b2a449b to your computer and use it in GitHub Desktop.
Save alanrsoares/ed639416efe4d7f6ea8f2a4f6b2a449b to your computer and use it in GitHub Desktop.
JS Bin grouping dynamically generated datasets // source http://jsbin.com/netulis
<!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>
// 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