JSFiddle - React, Tailwind, and code Playground

by st3fan

JavaScript

var filterArray = function(list, filter, query) {
    //console.log('filterArray', arguments);
    
    if (typeof filter !== 'function')
        return;
    
    var args = Array.prototype.slice.call(arguments, 2), // Exclude list and filter
        matches = [];

    list.each(function(index, item) {
        var a = [item].concat(args); // Append all optional arguments
        var test = filter.apply(this, a); // Invoke supplied filter function
        if (test) matches.push(item);
    });
    
    return matches;
};

// Array.prototype
Array.prototype.addFunction = function(name, fn) {
    //console.log('addFunction', this, arguments); // DEBUG
    if (typeof fn == 'function') {
        this[name] = fn;
    }
};
Array.prototype.addFunction('addFilter', function(name, filter) {
    //console.log('addFilter', this, arguments); // DEBUG
    this.addFunction(name, function(query) {
        var args = Array.prototype.slice.call(arguments),
            args = [this, filter].concat(args);
        
        return filterArray.apply(this, args);
    });
});
Array.prototype.addFunction('each', function(iterator) {
    //console.log('each', arguments); // DEBUG
    for (var i = 0; i < this.length; i++) {
        iterator.call(this[i], i, this[i], this); // index/key, value, list
    }
    return this;
});

// Custom filters
var filters = {};
filters.contains = function(value, query) {
    return value.indexOf(query) > -1;
};
filters.equals = function(value, query) {
    return value === query;
};

// Add filters
for (var filterName in filters) {
    Array.prototype.addFilter(filterName, filters[filterName]);
}

// Tests
var assert = function(name, result) {
    var test = arguments.length === 2 ? result :
        _.isEqual(result, arguments[2]);

    test ? console.info(name, 'PASSED') : console.warn(name, 'FAILED');
};
var array = [ 'yellow', 'green', 'red', 'blue', 'purple', 'orange', 'black', 'white' ];
var query = 'a';
var expectation = [ 'orange', 'black' ];


var a...