functiondeepMergeObject(...objects) { let subs = []; for (let obj of objects) { if (obj === undefined) { continue; } if (subs.length > 0 && getObjectType(obj) !== getObjectType(subs[0])) { subs = [obj]; } else { subs.push(obj); } } if (subs.length === 0) { returnundefined; } let type = getObjectType(subs[0]); if (subs.length === 1 || (type !== "object" && type !== "array")) { return subs[subs.length - 1]; } let keySet = newSet(); for (let obj of objects) { for (let k in obj) { keySet.add(k); } } let newObj = type === "object" ? {} : []; for (let k of keySet) { let child = []; for (let obj of subs) { child.push(obj[k]); } newObj[k] = deepMergeObject(...child); } return newObj; }