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);

    


//}