function mergeSort(arr) {
  if (arr.length <= 1) {
    return arr;
  } else {
    let half = Math.round(arr.length / 2);
    let leftSide = mergeSort(arr.slice(0, half));
    let rightSide = mergeSort(arr.slice(half, arr.length));

    let newArr = mergeArray(leftSide, rightSide);

    return newArr;
  }
}

function mergeArray(left, right) {
  let sorted = [];

  while (left.length && right.length) {
    if (left[0] < right[0]) {
      sorted.push(left.shift());
    } else {
      sorted.push(right.shift());
    }
  }
  return sorted.concat(left, right);
}
let testCaseOne = [2, 1, 3, 9, 4, 5, 23, 10];

let testCaseTWo = [23, 5, 3, 1, 8, 7, 2, 4];
console.log(`Test Case No1: ${testCaseOne}`);
console.log(mergeSort(testCaseOne));
console.log(`Test Case No2: ${testCaseTWo}`);
console.log(mergeSort(testCaseTWo));