From ac5b0b8b419085b21bd59138c4e6bed4e0930823 Mon Sep 17 00:00:00 2001 From: ztimson Date: Tue, 18 Jun 2024 19:31:08 -0400 Subject: [PATCH] Added merge object --- package.json | 2 +- src/objects.ts | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 9acf86b..49d0988 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ztimson/utils", - "version": "0.11.3", + "version": "0.12.0", "description": "Utility library", "author": "Zak Timson", "license": "MIT", diff --git a/src/objects.ts b/src/objects.ts index b26491a..efefc96 100644 --- a/src/objects.ts +++ b/src/objects.ts @@ -35,6 +35,27 @@ export function deepCopy(value: T): T { return JSON.parse(JSON.stringify(value)); } +/** + * Merge any number of objects into the target + * + * @param target Destination of all properties + * @param sources Objects that will copied into target + * @return {any} The des + */ +function deepMerge(target: any, ...sources: any[]): T { + for(const source of sources) { + for(const key in source) { + if(source[key] && typeof source[key] == 'object' && !Array.isArray(source[key])) { + if(!target[key]) target[key] = {}; + deepMerge(target[key], source[key]); + } else { + target[key] = source[key]; + } + } + } + return target; +} + /** * Get/set a property of an object using dot notation *