Массива обратный против простых arithmethic


Меня попросили распечатать цифры от 100 до 1 в for цикл с индексом, начиная с 1. Я придумал такое решение:

var a = [];

for(var i = 1; i <= 100; i++) {
    a.push(i);
}

console.log(a.reverse());

Я думаю лучший способ сделать это после интервью и придумал это

for(var i = 1; i <= 100; i++) {
    console.log((100-i)+1);
}

Теперь, что дует мой разум, jsperf.com'ы тест показывает, бывшего быстрее. Как это вообще возможно? Создание массива, что-то толкает на это и обращать ее перед печатью определенно, кажется, медленнее, чем простая арифметика. Кто-нибудь может помочь мне понять это?



Комментарии
3 ответа

Получается, достигать больше времени консоль взять, чем толкая значение в массив. Консоль.журнал действительно реализован как синхронный функция (следующая печать начинается только после последней печати отделки).
Смысл, нет системы буферизации. Программа идет в состоянии блокировки до консоли.журнал() отделка печатание, каждый раз.
Разница в производительности в двух вышеназванных случаях из-за разницы в количестве консоли.журнал() вызова.

3
ответ дан 10 февраля 2018 в 04:02 Источник Поделиться

Вы также можете нажать на обратный порядок значений в массиве, так что вы можете избежать обратного() и вызова консоли.журнал() вне цикла.

var a = [];

for(var i = 1; i <= 100; i++) {
a.push(101-i);
}

console.log(a)

1
ответ дан 13 февраля 2018 в 09:02 Источник Поделиться

Представлены оба варианта выглядят несколько косвенных. Что о

for (var i = 100 ; 1 <= i ; --i)
console.log(i);

(Я допускаю, что print numbers from 100 to 1 in a for loop with the index starting from 1 читает использовать массив - не уверен, что начиная с 1.)

for (var index = 1 ; 1 <= (99+index) ; --index)
console.log(99+index);

0
ответ дан 10 февраля 2018 в 09:02 Источник Поделиться