Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
lodash.get vs optional chaining vs safeGet vs dlv
Compare lodash.get to babel transpiled ?. (optional chaining) operator
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Browser:
Chrome 120
Operating system:
Windows
Device Platform:
Desktop
Date tested:
2 years ago
Test name
Executions per second
lodash.get
4446372.0 Ops/sec
Optional chaining (babel es2015)
5947105.5 Ops/sec
safeGet
3556851.8 Ops/sec
dlv (dot notation)
5101815.5 Ops/sec
dlv (array notation)
6122873.5 Ops/sec
HTML Preparation code:
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js'></script>
Script Preparation code:
var state = { wrapped1: { wrapped2: { location: { search: '', id: 12 } } }, data: {} }; var safeGet = function(nestedObj, paths, defaultVal) { if (!paths || paths.length === 0) return defaultVal const result = paths.slice(0).reduce((obj, path, i, arr) => { if (!obj) { arr.splice(i) // break out of the loop return undefined } return obj[path] }, nestedObj) if (result === undefined || result === null) { return defaultVal } return result } var dlv = function(obj, key, def, p, undef) { key = key.split ? key.split('.') : key; for (p = 0; p < key.length; p++) { obj = obj ? obj[key[p]] : undef; } return obj === undef ? def : obj; }
Tests:
lodash.get
var l = _.get(state, ['wrapped1','wrapped2','location','search']);
Optional chaining (babel es2015)
var _state$wrapped, _state$wrapped$wrappe, _state$wrapped$wrappe2; var s = state === null || state === void 0 ? void 0 : (_state$wrapped = state.wrapped1) === null || _state$wrapped === void 0 ? void 0 : (_state$wrapped$wrappe = _state$wrapped.wrapped2) === null || _state$wrapped$wrappe === void 0 ? void 0 : (_state$wrapped$wrappe2 = _state$wrapped$wrappe.location) === null || _state$wrapped$wrappe2 === void 0 ? void 0 : _state$wrapped$wrappe2.search;
safeGet
var l = safeGet(state, ['wrapped1','wrapped2','location','search']);
dlv (dot notation)
dlv(state, 'wrapped1.wrapped2.location.search');
dlv (array notation)
dlv(state, ['wrapped1','wrapped2','location','search']);