Как Конкатенировать два отсортированных массива .?

static void Main(string[] args)
{
    int[] arr = {12,13,22,1333 };
    int[] arr2 = {6,4,3596, };
    int[] vs = ArrayAdd(arr, arr2);

    Array.Sort(vs);
    foreach (var item in vs)
    {
        Console.Write(item+",");
    }
    //Console.WriteLine(vs.Length);
}
static T[] ArrayAdd<T>(T[] arr, T[] arr2)
{
    Sort1(arr);Sort1(arr2);
    var res = new T[arr.Length + arr2.Length];
    for (var i = 0; i < arr.Length; i++)
        res[i] = arr[i];
    for (var i = 0; i < arr2.Length; i++)
        res[arr.Length + i] = arr2[i];
   
    return res;
}

как написать этот код, чтобы он работал на JavaScript. На выходе возвращает undefined, но на c# работает нормально

let arr=[7,3,6,1];
let arr2=[2,4,5];

let res = new Array(arr.length + arr2.length);

function merg(arr,arr2) {
    arr.sort();  arr2.sort();
  
    for (let i = 0; i < arr.Length; i++)
        res[i] = arr[i];
    for (let i = 0; i < arr2.Length; i++)
        res[arr.Length + i] = arr2[i];
    return res;
};

console.log(merg(arr,arr2));

Ответы (1 шт):

Автор решения: Grundy

Код с c# переносится практически 1 к 1, если убрать из кода определение типов, и вызывать соответствующие методы, например, длину массива в js можно получить из свойства .length

Тогда из

static T[] ArrayAdd<T>(T[] arr, T[] arr2)
{
    Sort1(arr);Sort1(arr2);
    var res = new T[arr.Length + arr2.Length];
    for (var i = 0; i < arr.Length; i++)
        res[i] = arr[i];
    for (var i = 0; i < arr2.Length; i++)
        res[arr.Length + i] = arr2[i];
   
    return res;
}

Останется следующее

function ArrayAdd(arr, arr2)
{
    arr.sort();arr2.sort();
    var res = new Array(arr.length + arr2.length);
    for (var i = 0; i < arr.length; i++)
        res[i] = arr[i];
    for (var i = 0; i < arr2.length; i++)
        res[arr.length + i] = arr2[i];
   
    return res;
}

Единственное отличие в поведении теперь, заключается в том, что по умолчанию компаратор метода sort сравнивает элементы как строки, в то время как в C# результат зависит от типа элементов коллекции.

Для правильной сортировки достаточно передать нужный компаратор:

let arr = [7, 13, 6, 1];
let arr2 = [2, 4, 15];

function ArrayAdd(arr, arr2) {
  arr.sort((a, b) => a - b);
  arr2.sort((a, b) => a - b);
  var res = new Array(arr.length + arr2.length);
  for (var i = 0; i < arr.length; i++)
    res[i] = arr[i];
  for (var i = 0; i < arr2.length; i++)
    res[arr.length + i] = arr2[i];

  return res;
}
console.log(ArrayAdd(arr, arr2))

→ Ссылка