@lunaticmuch/front-matter-manipulator
Version:
A utility for parsing and manipulating documents with Front Matter
62 lines (50 loc) • 1.77 kB
JavaScript
import getFieldPermutations from './getFieldPermutations.js';
import getDescendantProp from './getDescendantProp.js';
export default function filterByFields(filters, data, exclude) {
var filtered = data.filter(function(data) {
for (var i = 0; i < filters.length; i++) {
if (exclude === true) {
var isExcluded = excludeByField(filters[i], data);
return isExcluded;
} else {
var isIncluded = includeByField(filters[i], data);
return isIncluded;
}
}
});
return filtered;
}
function includeByField(filter, data) {
if (!filter) throw new Error('Missing value for "filter"');
if (!data) throw new Error('Missing value for "data"');
var field = filter[0];
var permutations = getFieldPermutations(field, data);
var desiredValue = filter[1];
var trueValues = permutations.map(function(p) {
return getDescendantProp(data, p);
});
for (var i = 0; i < trueValues.length; i++) {
var trueValue = trueValues[i];
if (trueValue === desiredValue) {
return true;
}
}
return false;
}
function excludeByField(filter, data) {
if (!filter) throw new Error('Missing value for "filter"');
if (!data) throw new Error('Missing value for "data"');
var field = filter[0];
var permutations = getFieldPermutations(field, data);
var desiredValue = filter[1];
var trueValues = permutations.map(function(p) {
return getDescendantProp(data, p);
});
for (var i = 0; i < trueValues.length; i++) {
var trueValue = trueValues[i];
if (trueValue === desiredValue) {
return false;
}
}
return true;
}