Я провел несколько испытаний решений, которые не только решают массив, но и делают его копию. Вот тестовый код. Метод reverse2
является самым быстрым в Chrome, но в Firefox метод reverse
является самым быстрым.
var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var reverse1 = function() {
var reversed = array.slice().reverse();
};
var reverse2 = function() {
var reversed = [];
for (var i = array.length - 1; i >= 0; i--) {
reversed.push(array[i]);
}
};
var reverse3 = function() {
var reversed = [];
array.forEach(function(v) {
reversed.unshift(v);
});
};
console.time('reverse1');
for (var x = 0; x < 1000000; x++) {
reverse1();
}
console.timeEnd('reverse1'); // Around 184ms on my computer in Chrome
console.time('reverse2');
for (var x = 0; x < 1000000; x++) {
reverse2();
}
console.timeEnd('reverse2'); // Around 78ms on my computer in Chrome
console.time('reverse3');
for (var x = 0; x < 1000000; x++) {
reverse3();
}
console.timeEnd('reverse3'); // Around 1114ms on my computer in Chrome
Я могу предложить одно из следующих решений:
ИЗМЕНИТЬ Три замечания, которые мне лучше упомянуть явно, на всякий случай:
Это непростая проблема, но я могу предложить несколько простую ситуацию, которая мне не подходит.
next_frame
на произвольную величину (abs (prev_frame-next_frame_rotated))
, чтобы найти статические элементы. Вам придется поиграть с тем, какое пороговое значение использовать. мин (template_match (prev_frame_background, next_frame_rotated_background))
next_frame
Это не сработает для нескольких кадров с течением времени , поэтому вы захотите изучить использование аккумулятора фона , чтобы фон, который ищет алгоритм, был одинаковым во времени.