Каков наиболее эффективный способ слияния [1,2] и [7,8] с [[1,7], [2,8]]

Учитывая 2 массива [1,2] и [7,8], что является наиболее эффективным способом слияния, чтобы сформировать [[1,7], [2,8]]. Я знаю, мы можем это сделать:

a1 = [1,2], a2 = [7,8], a3=[];
for (var i=0; i<a1.length; i++) {
  a3.push([a1[i], a2[i]]);
}

Я имею дело с большим массивом. Поэтому я хочу посмотреть, есть ли лучший способ.

Ответ 1

Невозможно сделать это быстрее, чем O (n), потому что каждый элемент нужно трогать один раз.

Ответ 3

Это хороший вопрос!

Прежде всего, убедитесь, что вы назначили a1,a2,a3 локальной области с помощью ключевого слова var, которое, кажется, вы забыли. В противном случае производительность может сильно пострадать.

Что касается сравнения производительности кода. Вы можете проверить/увидеть результаты здесь:

zip tests

чистый JavaScript:

var a1 = [1, 2],
  a2 = [7, 8],
  a3 = [];
for (var i = 0; i < a1.length; i++) {
  a3.push([a1[i], a2[i]]);
}

JS/Родные методы:

var a1 = [1, 2],
  a2 = [7, 8],
  a3 = [];
a3 = a1.map(function(e, i, a) {
  return [e, a2[i]]
})

Конечно, возможны более реалистичные реализации, но дело в том, что, возможно, никакая другая реализация не может превзойти за цикл и прямую упаковку в O (n) -time, как любезно указано Travis J.

Двигатель/оптимизирован: V8 JavaScript Engine через Chrome v29

Ответ 4

Нет, это так же эффективно, как и получается. Он работает в O (n) времени. На самом деле не намного больше вы можете спросить. Если вы что-то можете оптимизировать, это превратит a1 в карту, но эта оптимизация для памяти, и похоже, что вы хотите ускорить работу.