Сразу оговорюсь: я далеко не специалист в JavaScript.

Как эффективнее (по времени выполнения) склеить два массива в JavaScript? Мне приходят в голову два варианта:

foo = foo.concat(bar)

и

bar.forEach(function(x) { foo.push(x) })

Оба варианта, прямо скажем, не идеальны. Идельным вариантом, на мой взгляд, было бы что-то вроде

foo.append(bar)

в результате которого foo бы сначала увеличился до нужного размера (или больше) а затем отработало быстрое копирование. Что-то подобное возможно?

Miniquiz: В MapReduce MongoDB используется JavaScript-движок SpiderMonkey. Какой вариант, первый или второй, будет быстрее сливать мильёны объектов в reduce-функции?

(спойлер: второй. до двух раз быстрее)



blog comments powered by Disqus

Published

26 June 2011

Tags