JSFiddle - React, Tailwind, and code Playground
by Jon-Carlos Rivera
HTML
<script src="http://jon-carlos.com/scripts/masala.js"></script>
JavaScript
//function () {
var Person = masala(Object.create, {
sex: null,
name: null
}, {
say: {
value: function () {
return "My name is " + this.name;
}
}
});
var people = {
'female': [
'Malory Archer',
'Lana Kane',
'Cheryl Tunt',
'Pam Poovey'
],
'male ': [
'Sterling Archer',
'Cyril Figgis',
'Ray Gillette',
'Dr.Krieger'
]
};
var applyTo = masala(function (fn, arr) {
return arr.map(function (val) { return fn(val) });
});
var zipWith = masala(function (fn, a, b) {
return a.map(function (val, i) {
return fn(val, b[i]);
});
});
var pluck = masala(function (obj, key) {
return obj[key];
});
var depluck = masala(function (key, value) {
var o = {};
return (o[key] = value, o);
});
var concat = Function.prototype.apply.bind(Array.prototype.concat);
var map = Function.prototype.call.bind(Array.prototype.map);
var SexedPerson = Object.keys(people)
.map(depluck('sex'))
.map(Person)
console.log(SexedPerson);
var names = Object.keys(people)
.map(pluck(people))
.map(applyTo(depluck('name')));
console.log(names);
var peopleObjs = zipWith(map, names, SexedPerson)
.reduce(concat);
console.log(peopleObjs);
//}