JavaScript UI component library, includes the latest Fancybox
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

44 lines
1.1 KiB

import { isPlainObject } from "./isPlainObject.js";
/**
* Merge the contents of two or more objects together into the first object.
* If passing "true" for first argument, the merge becomes recursive (aka. deep copy).
* @param {...any} args
* @returns {Object}
*/
export const extend = (...args) => {
let deep = false;
if (typeof args[0] == "boolean") {
deep = args.shift();
}
let result = args[0];
if (!result || typeof result !== "object") {
throw new Error("extendee must be an object");
}
const extenders = args.slice(1);
const len = extenders.length;
for (let i = 0; i < len; i++) {
const extender = extenders[i];
for (let key in extender) {
if (extender.hasOwnProperty(key)) {
const value = extender[key];
if (deep && (Array.isArray(value) || isPlainObject(value))) {
const base = Array.isArray(value) ? [] : {};
result[key] = extend(true, result.hasOwnProperty(key) ? result[key] : base, value);
} else {
result[key] = value;
}
}
}
}
return result;
};