export function arraysEqual(a, b) { if (a === b) return true if (a == null || b == null) return false if (a.length != b.length) return false const aIncludeB = a.every((element) => b.indexOf(element) > -1) if (!aIncludeB) return false const bIncludeA = b.every((element) => a.indexOf(element) > -1) return bIncludeA } /** * Simple object check. * @param item * @returns {boolean} */ function isObject(item) { return item && typeof item === 'object' && !Array.isArray(item) } /** * Deep merge two objects. * @param target * @param ...sources */ export function mergeDeep(target, ...sources) { if (!sources.length) return target const source = sources.shift() if (isObject(target) && isObject(source)) { for (const key in source) { if (isObject(source[key])) { if (!target[key]) Object.assign(target, { [key]: {} }) mergeDeep(target[key], source[key]) } else { Object.assign(target, { [key]: source[key] }) } } } return mergeDeep(target, ...sources) } /** * Change value of different types to array. * @param value */ export function anyToArray(value) { if (isObject(value)) { value = Object.values(value) } return [].concat(value) }