Существует простое однострочное решение, которое включает курорт.Использование параметров по умолчанию для работы с неопределенными массивами и оператора распространения для заполнения нового массива двумя объединяющимися массивами.Массив результатов просто нужно отсортировать и затем вернуть.
const mergeSorted = (a1 = [], a2 = []) => [...a1, ...a2].sort((a, b) => a - b);
Пример
const mergeSorted= (a1 = [], a2 = []) => [...a1, ...a2].sort((a, b) => a - b);
console.log(mergeSorted([0, 3, 4, 31], [3, 4, 6, 30]).join(", "));
Или без сортировки и использования параметров по умолчанию, чтобы избежать необходимости проверять массивы на неопределенные значения
function mergeSorted(a1 = [], a2 = []) {
const res = [];
var idx1 = 0, idx2 = 0;
while (idx1 < a1.length || idx2 < a2.length) {
if (idx1 < a1.length && idx2 < a2.length) {
res.push(a1[idx1] < a2[idx2] ? a1[idx1++] : a2[idx2++]);
} else {
res.push(idx1 < a1.length ? a1[idx1++] : a2[idx2++]);
}
}
return res;
}
Пример
function mergeSorted(a1 = [], a2 = []) {
const res = [], l1 = a1.length, l2 = a2.length;
var i1 = 0, i2 = 0;
while (i1 < l1 || i2 < l2) {
if (i1 < l1 && i2 < l2) { res.push(a1[i1] < a2[i2] ? a1[i1++] : a2[i2++]) }
else { res.push(i1 < l1 ? a1[i1++] : a2[i2++]) }
}
return res;
}
console.log(mergeSorted([0, 3, 4, 31, 99], [3, 4, 6, 30]).join(", "));