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);