Массивы Javascript: объединить 2 массива с приоритетом

Как объединить два массива разной длины и значения более короткого массива должны иметь приоритет над значениями большего массива, но результат все равно должен иметь длину большего массива. Пожалуйста, посмотрите внимательно, как я расположил два массива ниже:

var short  = [[ 25,12],          [576, 12],          [576,584],          [ 25,584],          [ 25,12]];
var long   = [[301,12],[400,192],[602,230],[461,380],[487,584],[301,497],[115,584],[140,380],[301,12]];
// --------------------as suggested by the above
var result = [[ 25,12],[400,192],[576, 12],[461,380],[576,584],[301,497],[ 25,584],[140,380],[ 25,12]];

В приведенном выше примере кажется, что длина long в два раза по сравнению с short, но он должен работать, даже если он в три раза больше или на один элемент длиннее.

1 ответ

Решение

Это довольно просто. Просто создайте копию более длинного массива, затем перезапишите элементы в этой копии с элементами из более короткого массива.

var m = Math.floor(long.length/short.length);

var result = long.slice();
for(var i = 0; i < short.length; ++i) {
    result[i*m] = short[i];
}

Позже правка: На самом деле это неправильно. Интересной проблемой в этом вопросе является алгоритм разнесения, и вы не можете получить это с помощью этого простого умножения.

В любом случае, я оставлю этот ответ здесь, потому что это может помочь прояснить, в чем заключается эта проблема.

Другие вопросы по тегам