Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
lodash merge vs recursive indexed setter merge function
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
Browser:
Chrome 126
Operating system:
Mac OS X 10.15.7
Device Platform:
Desktop
Date tested:
one year ago
Test name
Executions per second
recursive indexed setter merge function
750282.8 Ops/sec
lodash merge
1246158.0 Ops/sec
HTML Preparation code:
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js'></script>
Script Preparation code:
function jsMerge(target, ...sources) { if (!sources.length) { return target; } sources.forEach((src) => { Object.keys(src).forEach((key) => { const value = src[key]; if (Object.prototype.hasOwnProperty.call(target, key)) { // target already has key. Merge if required. if (typeof target[key] === 'object' && typeof value === 'object') { // Try to merge objects or arrays if (Array.isArray(value)) { if (Array.isArray(target[key]) && target[key].length > value.length) { // Both arrays and old array is longer. Merge target[key] = Array.prototype.concat(value, Array.prototype.slice.call(target[key], value.length)); } else { // Either not both arrays or old array is same length/shorter. Overwrite. target[key] = value; } } else { // Both non-array objects. Recursively merge target[key] = jsMerge(target[key], value); } } else { // At least one side is not object/array. Overwrite. target[key] = value; } } else { // Key does not exist on object. Assign. target[key] = value; } }); }); return target; }
Tests:
recursive indexed setter merge function
var a1 = { a: 'oh', b: 'my', c: 'goodness', d: { a: 'nested', b: 'object', c: [ 'arrayA', 'arrayB', 'arrayC' ], e: 'a.d.e' } }; var b1 = { c: 'GOODNESS', d: { b: 'object!', c: [ 'array1', 'array2' ], d: 'b.d.d' } }; jsMerge(a1, b1);
lodash merge
var a2 = { a: 'oh', b: 'my', c: 'goodness', d: { a: 'nested', b: 'object', c: [ 'arrayA', 'arrayB', 'arrayC' ], e: 'a.d.e' } }; var b2 = { c: 'GOODNESS', d: { b: 'object!', c: [ 'array1', 'array2' ], d: 'b.d.d' } }; _.merge(a2, b2);