Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
Merge Deep Array
Merge an array of deeply nested objects of the same shape.
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1
Browser:
Mobile Safari 17
Operating system:
iOS 17.5.1
Device Platform:
Mobile
Date tested:
one year ago
Test name
Executions per second
deepMerge
596912.5 Ops/sec
deepMergeWithSpread
475206.9 Ops/sec
Library deepmerge
320982.5 Ops/sec
mergeLocalizedAndNamespacedTranslationRecord
650790.0 Ops/sec
HTML Preparation code:
<script src='https://unpkg.com/deepmerge/dist/umd.js'></script>
Script Preparation code:
var arr = [{ de: { product: { 'test.a.label': 'Beispiel A', 'test.a.body': 'Blindtext A', }, override: { 'test.a.override': 'Überschrieben A', }, }, en: { product: { 'test.a.label': 'Example A', 'test.a.body': 'Lorem Ipsum A', }, override: { 'test.a.override': 'Override A', }, }, }, { de: { product: { 'test.b.label': 'Beispiel B', 'test.b.body': 'Blindtext B', }, override: { 'test.b.override': 'Überschrieben B', }, }, en: { product: { 'test.b.label': 'Example B', 'test.b.body': 'Lorem Ipsum B', }, override: { 'test.b.override': 'Override B', }, }, }, { de: { product: { 'test.single-language.label': 'Beispiel einzelne Sprache', 'test.single-language.body': 'Blindtext für einzelene Sprache', }, override: { 'test.single-language.override': 'Überschrieben einzelene Sprache', }, }, }, { de: { product: { 'test.single-namespace.label': 'Beispiel Single Namespace', }, }, en: { product: { 'test.single-namespace.label': 'Example Single Namespace', }, }, }, {}, { de: {}, en: {}, }]; function deepMerge(obj1, obj2) { for (const key of Object.keys(obj2)) { if (obj2[key] instanceof Object && obj1[key] instanceof Object) { obj1[key] = deepMerge(obj1[key], obj2[key]); } else { obj1[key] = obj2[key]; } } return obj1; } function deepMergeWithSpread(obj1, obj2) { const result = { ...obj1 }; for (const key of Object.keys(obj2)) { if (obj2[key] instanceof Object && obj1[key] instanceof Object) { result[key] = deepMergeWithSpread(obj1[key], obj2[key]); } else { result[key] = obj2[key]; } } return result; } function mergeLocalizedAndNamespacedTranslationRecord(target, source) { const result = { ...target }; Object.keys(source).forEach((locale) => { if (!(locale in target)) { result[locale] = source[locale]; } else { result[locale] = mergeNamespacedTranslationRecords(target[locale], source[locale]); } }); return result; } function mergeNamespacedTranslationRecords(target, source) { const result = { ...target }; Object.keys(source).forEach((namespace) => { if (!(namespace in target)) { result[namespace] = source[namespace]; } else { result[namespace] = mergeSimpleRecords(target[namespace], source[namespace]); } }); return result; } function mergeSimpleRecords(target, source) { const result = { ...target }; Object.keys(source).forEach((key) => { result[key] = source[key]; }); return result; }
Tests:
deepMerge
deepMerge(arr[0], arr[1]);
deepMergeWithSpread
deepMergeWithSpread(arr[0], arr[1]);
Library deepmerge
deepmerge(arr[0], arr[1]);
mergeLocalizedAndNamespacedTranslationRecord
mergeLocalizedAndNamespacedTranslationRecord(arr[0], arr[1]);