JSFiddle - React, Tailwind, and code Playground
by vrmtm
JavaScript
var data = [
{ name: "jonas", age: 17, drink: "alus" },
{ name: "petras", age: 19, drink: "vynas" },
{ name: "zose", age: 66, drink: "vynas" },
{ name: "ekerepla", age: 39, drink: "viskis" },
];
var filterMapping = [
{
Action: "GreaterThan",
ColumnTitle: "age",
Operator: null,
Value: 18
},
{
Action: "Equals",
ColumnTitle: "drink",
Operator: "and",
Value: "vynas"
},
{
Action: "Equals",
ColumnTitle: "name",
Operator: "or",
Value: "ekerepla"
},
];
var filteredData = data.filter(function (tadaItem) {
return tadaItem.age > 18 && tadaItem.drink == "vynas" || tadaItem.name == "ekerepla";
});
/* console.log(filteredData); */
function doAction(a, b, action) {
switch (action) {
case 'GreaterThan':
return a > b;
case 'Equals':
return a === b;
default:
console.error('doAction: not implemented:', action)
return true;
}
}
function doOperator(a, b, operator) {
switch (operator) {
case 'and':
return a && b;
case 'or':
return a || b;
default:
if (operator !== null) {
console.error('doOperator: not implemented:', operator)
}
return b;
}
}
function filterData(item) {
return filterMapping.reduce(function(prev, next) {
const itemValue = item[next.ColumnTitle];
const actionOutcome = doAction(itemValue, next.Value, next.Action);
return doOperator(prev, actionOutcome, next.Operator)
}, true);
}
const filteredData2 = data.filter(filterData);
console.log(filteredData2);