function deepMergeArrays(first, second) {
	if (!first || !second) {
		return second || first || [];
	}

	return [
		...first.map((value, i) =>
			deepMergeObjects(value, i < second.length ? second[i] : void 0),
		),
		...second.slice(first.length),
	];
}
Deeply merges second on top of first, creating a new [] array if needed.
@param {T[]} first Base, default values.
@param {U[]} second User-specified values.
@returns {(T | U | (T & U))[]} Merged equivalent of second on top of first.