
22.03.2019, 18:57
|
Новичок на форуме
|
|
Регистрация: 22.03.2019
Сообщений: 5
|
|
Зачем в данном случае нужен метод Math.floor, если убрав его ничего не меняется. Буду благодарен за ответ , для моего понимания...
function reverseArrayInPlace(array) {
for (var i = 0; i < Math.floor(array.length - 1 - i); i++) {
let old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;
}
return array;
}
let arrayValue = [1, 2, 3, 4, 5, 6];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [6, 5, 4, 3, 2, 1]
|
|

22.03.2019, 19:02
|
 |
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
В данном случае Math.floor не нужен
function reverse(array) {
var j = array.length - 1;
for (var i = 0; i < j; i++, j--) {
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
|
|

25.03.2019, 09:18
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от Nexus
|
Без генератора скрипт будет пытаться создать массив бесконечной длины, с генератором будет суммировать числа до бесконечности.
|
Nexus, пробовать надо хотя бы, уверенность без экспериментов пустые слова и буквы и слова...
|
|

25.03.2019, 09:30
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,802
|
|
Сообщение от Malleys
|
Nexus, пробовать надо хотя бы, уверенность без экспериментов пустые слова и буквы и слова...
|
Попробовал, разницы с тем, что я написал не увидел.
//Attention: infinity loop
function* range(start, end) {
for (let i = start; i <= end; i++)
yield i;
}
function sum(array) {
let total = 0;
for(const value of array)
total += value;
return total;
}
sum(range(0, Infinity));
|
|

25.03.2019, 09:48
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
ОК, я такого, что вы тут написали даже и не запускал! В №9 чуть другой пример!
Вычисление range(1, Infinity) |> take.bind(null, 5) |> sum |> alert без итератора (Осторожность! Бесконечный цикл!)
function range(start, end) {
let array = [];
for (var i = start; i <= end; i++)
array.push(i);
return array;
}
function sum(array) {
let total = 0;
for(const value of array)
total += value;
return total;
}
function* take(n, xs) {
for(const x of xs) {
if(n-- <= 0)
break;
yield x;
}
}
alert(sum(take(5, range(1, Infinity))));
Вычисление range(1, Infinity) |> take.bind(null, 5) |> sum |> alert с итератором (Запускайте смело!)
function* range(start, end) {
for (let i = start; i <= end; i++)
yield i;
}
function sum(array) {
let total = 0;
for(const value of array)
total += value;
return total;
}
function* take(n, xs) {
for(const x of xs) {
if(n-- <= 0)
break;
yield x;
}
}
alert(sum(take(5, range(1, Infinity))));
|
|

25.03.2019, 09:52
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,802
|
|
Сообщение от Malleys
|
В №9 чуть другой пример!
|
Я не про этот пример, с ним-то все понятно)
Меня изначально интересовало почему вы в коде из поста №7 использовали генератор, причина этого. Может я чего-то не знаю.
Видимо причины особой использовать генератор не было.
Не буду вас больше мучить вопросами, спасибо.
|
|

25.03.2019, 11:07
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от Nexus
|
Меня изначально интересовало почему вы в коде из поста №7 использовали генератор, причина этого.
|
Так я же ответил в посте №9. Первые два предложения отвечают на ваш вопрос, вы видимо не поняли что это значит, поэтому сначала откройте Chrome DevTools (⌥⌘I), затем запустите примеры в этом посте и посмотрите, как они выполняются по шагам, для этого в панели Sources нажимайте последовательно на Step into next function call  , чтобы последовательно пройти через выполнение кода.
Вычисление range(1, Infinity) |> sum |> alert без итератора
function range(start, end) {
let array = [];
for (var i = start; i <= end; i++)
array.push(i);
return array;
}
function sum(array) {
let total = 0;
for(const value of array)
total += value;
return total;
}
debugger;
alert(sum(range(1, 5)));
Вычисление range(1, Infinity) |> sum |> alert с итератором
function* range(start, end) {
for (let i = start; i <= end; i++)
yield i;
}
function sum(array) {
let total = 0;
for(const value of array)
total += value;
return total;
}
debugger;
alert(sum(range(1, 5)));
|
|

25.03.2019, 11:21
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,138
|
|
Сообщение от Malleys
|
сначала откройте Chrome DevTools (⌥⌘I), затем запустите примеры в этом посте и посмотрите, как они выполняются по шагам, для этого в панели Sources нажимайте последовательно на Step into next function call
|

|
|

25.03.2019, 11:29
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,802
|
|
Сообщение от Malleys
|
Так я же ответил в посте №9. Первые два предложения отвечают на ваш вопрос, вы видимо не поняли что это значит
|
Все там понятно.
Непонятно, чем хуже вариант, в котором сначала создается массив значений, а после его значения суммируются.
|
|

25.03.2019, 11:34
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от Nexus
|
Непонятно, чем хуже вариант, в котором сначала создается массив значений, а после его значения суммируются.
|
Я нигде не говорил, что он хуже. В общем и целом сложность предложенного алгоритма была O(2n), я предложил вариант с O(n). Это не так критично, если вы только не будете суммировать миллионы чисел.
|
|
|
|