Object query POC
by wittnl
HTML
<code id="out"></code>
JavaScript
this._eventCache = [
{ event: 'moment_shown', moment_id: 1, section_id: 'intro_intro' },
{ event: 'moment_shown', moment_id: 2, section_id: 'intro_exp' },
{ event: 'moment_shown', moment_id: 3, section_id: 'intro_intro' },
{ event: 'moment_shown', moment_id: 4, section_id: 'intro_intro' }
];
function queryEvents(query) {
if('event' in query && query[event] != null) {
var queryKeys = Object.keys(query).filter(function(key) {
if(/string|number|boolean/.test(typeof(query[key]))) {
return true;
} else {
console.warn('queryEvents only supports primitive value selectors (string, number, boolean), ignoring selector "' + key + '"');
return false;
}
});
return this._eventCache.reduce(function(acc, cachedEvent) {
const queryMatch = queryKeys.every(function(key) {
return query[key] === cachedEvent[key];
});
return queryMatch ? acc.concat(cachedEvent): acc;
}, []);
} else {
console.error('Event name is required for queryEvents');
return [];
}
}
var results = queryEvents({ event: 'moment_shown', section_id: {dafuq: true} });
out.innerHTML = JSON.stringify(results, null, 2);