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 = [];
//for (var i = 0; i < list.length; i++) {
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;
};
// Custom filters
var filters = {};
filters.contains = function(value, query) {
return value.indexOf(query) > -1;
};
filters.equals = function(value, query) {
return value === query;
};
// Array.prototype
Array.prototype.addFunction = function(name, func) {
//console.log('addFunction', this, arguments); // DEBUG
if (typeof func == 'function') {
this[name] = func;
}
};
//Array.prototype.addFilter = function(name, filter) {
// this.addFunction(function(query) { // TODO: Pass function name to addFunction?
// var args = Array.prototype.slice.call(arguments),
// args = [this, filter].concat(args);
// return filterArray.apply(this, args);
// });
//};
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;
});
// Tests
var assert = function(name, result) {
var test = arguments.length == 2 ? result :
...