Test name | Executions per second |
---|---|
jsonata | 4864.3 Ops/sec |
simple | 103051.5 Ops/sec |
jspath | 429871.4 Ops/sec |
jmespath | 153924.8 Ops/sec |
control | 225045.5 Ops/sec |
<script type="text/javascript" language="javascript" src="https://cdn.jsdelivr.net/npm/jsonata@1.5.4/jsonata-es5.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.jsdelivr.net/npm/jspath@0.4.0/jspath.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jmespath/0.15.0/jmespath.min.js"></script>
<script type="text/javascript" language="javascript" src="https://prototype.imin.co/eventseries-sample.js"></script>
<script type="text/javascript" language="javascript" src="http://meta.imin.co/v2.js"></script>
var get = p => o =>
p.reduce((xs, x) => {
if (Array.isArray(xs)) {
return xs.map(get([x])).filter(y => y !== null).flat();
} else {
return (xs && xs[x]) ? xs[x] : null;
}
}, o);
function flattenCollection(collectionIndex) {
if (collectionIndex.type === 'imin:CollectionIndex') {
return Object.entries(collectionIndex['imin:index']).reduce(function(map, [k,v]) {
map[k] = flattenCollection(v);
return map;
}, {});
} else if (collectionIndex.type === 'imin:Collection') {
return collectionIndex['imin:item'].reduce(function(map, item) {
map[item.id] = item;
return map;
}, {});
} else {
return collectionIndex;
}
}
var jsonataResult = jsonata('subEvent.offers.acceptedPaymentMethod').evaluate(result).join('<br />');
var simpleResult = get(['subEvent','offers','acceptedPaymentMethod'])(result).join('<br />');
var jsPathResult = JSPath.apply('.subEvent.offers.acceptedPaymentMethod', result).join('<br />');
var jmespathResult = jmespath.search(result, 'subEvent[].offers[].acceptedPaymentMethod[]').join('<br />');
result.subEvent.map(s => s.offers.map(o => o.acceptedPaymentMethod)).flat(2).join('<br />')
var jsPathResult = JSPath.apply('."imin:aggregateOffer".publicAdult{.price > 0 && .priceCurrency > "."}[-1]', result);
var jsPathResult = JSPath.apply('."imin:index"(.subClass | .enumeration).."imin:item"', window.imin.v2.meta);
var jsPathResult = JSPath.apply('."imin:index"(.subClass | .enumeration)..name', window.imin.v2.meta);
var result = flattenCollection(window.imin.v2.meta);